Додавання формфайлу чи класу характеристик як шар у ArcGIS Desktop за допомогою Python / ArcPy?


20

Я намагаюся автоматизувати різні завдання в ArcGIS Desktop (використовуючи ArcMap взагалі) за допомогою Python, і мені постійно потрібен спосіб додати форму форми до поточної карти. (А потім займіться цим, але це вже інша історія).

Найкраще, що я можу зробити, це додати файл шару до поточної карти, використовуючи наступне ("addLayer" є об'єктом файлового шару):

def AddLayerFromLayerFile(addLayer):
 import arcpy
 mxd = arcpy.mapping.MapDocument("CURRENT")
 df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
 arcpy.mapping.AddLayer(df, addLayer, "AUTO_ARRANGE")
 arcpy.RefreshActiveView()
 arcpy.RefreshTOC()
 del mxd, df, addLayer

Однак мої необроблені дані завжди мають форму файлів, тому мені потрібно мати можливість їх відкривати. (Рівнозначно: перетворіть файл форми у файл шару, не відкриваючи його, але я вважаю за краще не робити цього).

Відповіді:


30

Ось що я виявив, що працював:

import arcpy
from arcpy import env

# get the map document
mxd = arcpy.mapping.MapDocument("CURRENT")

# get the data frame
df = arcpy.mapping.ListDataFrames(mxd,"*")[0]

# create a new layer
newlayer = arcpy.mapping.Layer(path_to_shapefile_or_feature_class)

# add the layer to the map at the bottom of the TOC in data frame 0
arcpy.mapping.AddLayer(df, newlayer,"BOTTOM")

Рамка даних (змінна df), в яку цей код покладе новий рівень, є першим фреймом даних у документі карти. Також зауважте, що цей код додає дані як новий шар у нижній частині TOC. Ви також можете використовувати інші параметри розташування, які є "AUTO_ARRANGE" та "TOP".


2
Іншим варіантом для визначення фрейму даних є використання активного фрейму даних: df = mxd.activeDataFrame замість df = arcpy.mapping.ListDataFrames (mxd) [0] - також вам не потрібно "*" у списку виклику кадрів даних .
jbalk

10

Зробити функціональний шар (управління даними) http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000006p000000.htm

Я щойно спробував це у вікні Python ArcMap, і він додає безпосередньо до моєї карти (мені не довелося отримувати мій кадр даних і дзвонити в AddLayer).

arcpy.MakeFeatureLayer_management('r:/temp/a.shp','test') alt текст


Це чудово працює в безпосередньому вікні ... але коли я спробую той самий код у файлі сценарію і запускаю його, нічого не відбувається! (Код запускається без повідомлень про помилки, але в ToC нічого не з’являється) Також, якщо я видаляю шар із ToC, потім спробуйте запустити код у безпосередньому вікні ще раз, я отримаю помилку типу «файл вже існує». Де зберігається файл тестового шару?
Tom W

Ви встановили SP1?
Jason Scheirer

1
@Tom W: Я майже noob з python та arcpy. Але я не думаю, що файл шару фізично створений. Якщо ви хочете файл шар, ви повинні зробити це і передати ім'я шару в якості параметра: arcpy.SaveToLayerFile_management('test', 'r:/temp/evilmonkey.lyr', 'ABSOLUTE') якщо ви не хочете зберегти шар , і ви просто хочете його немає, arcpy.Delete_management('test').
Jay Cummins

@Tom W: просто перечитайте ваш коментар. Ви намагаєтесь додати шар до ArcMap з окремої оболонки python (не з безпосереднього вікна)? Я не думав, що ти можеш це зробити (але я не авторитет у цьому ... можливо, ти можеш).
Jay Cummins

1
@Tom W: Я знаю про помилку шару, тому я переконався, що SP1 встановлений. Щоб додати шар до TOC, як ви описуєте, вам потрібно, щоб ваш скрипт мав похідний шар функції виводу та встановив значення імені шару, який ви створили. Інструменти GP в ArcMap намагаються захистити TOC від хибних шарів (temp FCs тощо) в інструментах GP, тому вам потрібно визначити в параметрі інструмента сценарію, що ваш новий функціональний шар залишиться в TOC, коли буде готово. Там, де шар живе на диску, швидше за все, джерело даних FC, тому Клас Feature названий таким же, як і шар у вашій робочій області.
Jason Scheirer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.