2010-10-25 2 views
4

Я пытаюсь автоматизировать различные задачи в ArcGIS Desktop (с использованием ArcMap в целом) с Python, и я продолжаю использовать способ добавления файла формы к текущей карте. (И потом делайте что-нибудь, но это еще одна история).Как добавить шейп-файл в ArcGIS с помощью скриптов 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 

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

+0

Этот код выглядит так, как будто он будет работа ... Можете ли вы уточнить свой вопрос? – garnertb

+0

Код добавляет файл слоя. Я хочу добавить файл формы. –

ответ

4

Переменная «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 
+3

Привет, я пробовал это, но продолжаю получать «: Object: CreateObject Layer недопустимый источник данных «Он работает с .lyr-файлами, но не с .shp ?? –

0

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

# 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.