Как добавить шейп-файл в ArcGIS с помощью сценариев Python?

Я пытаюсь автоматизировать различные задачи в 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

Тем не менее, мои необработанные данные всегда будут файлами форм, поэтому я должен иметь возможность открывать их. (Эквивалентно: преобразовать файл формы в файл слоя, не открывая его, но я бы предпочел этого не делать).

2 ответа

Решение

Переменная "theShape" - это путь к файлу формы, который будет добавлен.

import arcpy
import arcpy.mapping
# 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(theShape)  

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

# Refresh things
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
del mxd, df, newlayer

Недавно я боролся с подобной задачей и первоначально использовал метод идентификации документа карты, идентификации фрейма данных, создания слоя и добавления слоя в документ карты. Интересно, что все это может быть выполнено с использованием следующего при условии, что он вызывается из текущего документа карты.

# import modules
import arcpy

# create layer in TOC and reference it in a variable for possible other actions
newLyr = arcpy.MakeFeatureLayer_managment(
    in_features, 
    out_layer
)[0]

Make Feature Layer требует два входа, входные объекты и выходной слой. Входными объектами могут быть любые типы классов объектов или слоев. Это включает шейп-файлы. Выходной слой - это имя слоя, которое будет отображаться в оглавлении.

Кроме того, Make Feature Layer может принимать предложение where для создания запроса определения во время создания. Обычно это то, как я это реализую, когда нужно быстро создать много слоев с различными запросами определения.

Наконец, в приведенном выше фрагменте, хотя это и не является необходимым, я продемонстрировал, как заполнить переменную результатом вывода инструмента, чтобы можно было манипулировать слоем в оглавлении с помощью arcpy.mapping, если это необходимо позже в сценарии., Каждый инструмент возвращает объект результата. Доступ к выходному объекту результата можно получить с помощью метода getOutput, но к нему также можно получить доступ с помощью индекса интересующего вас свойства результата, в данном случае выходной файл расположен с индексом 0.

Другие вопросы по тегам