У меня есть таблица, в которую я хотел бы присоединиться к шейп-файлу ArcGIS. Моя проблема заключается в том, что таблица имеет два поля Identity (например, «Номер плана» и «Номер контракта»), а шейп-файл имеет одно поле «Идентификация» (т. Е. «Имя»). Я хочу присоединиться к «Имя» в шейп-файле либо «Номер плана», либо «Номер контракта».Присоединение одного из двух полей в таблице dbf к одному файлу формы ArcGIS - Python
В качестве фона шейп-файл создается путем рисования вручную полигонов в ArcGIS. Эти многоугольники представляют собой различные проекты. Идентификатор «Имя» может быть либо начальным номером планирования проекта, либо номером контракта, который существует после того, как проект будет заложен в бюджет. Номер планирования существует, когда нет бюджета, а номер контракта - позже. Создаются полигоны, и поле «Имя» заполняется любым этапом идентификации (номер планирования или номер контракта), который был достигнут в проекте. Таким образом, поле shapefile «Name» содержит либо номера планирования, либо номера контрактов.
Одновременно с этим, мы имеем сложную базу данных всех проектов с двумя полями, представляющих как номер планирования и номер контракта:
PLN ------------ Договор ----- Фаза ------------ Длина ----- NTP --------- SC ------------- Примечания
1415-003 ----- WD-2506 ---- Pre-Planning ---- 45 ---- ---------- 1/1/1900 1/20/1900 ----- тест
Для создания моего кода я создал простую таблицу xml, которая ссылается на базу данных. В этой таблице xml есть поле PLN (номер плана) и поле Contract (Contract Number). В моем коде я преобразовал этот xml в dbf. Теперь я пытаюсь найти способ присоединиться к Shapefile «Name» к «PLN» или «Контракт».
Пожалуйста, смотрите код ниже:
#Convert xlsx to table:
import xlrd
in_excel= r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\JoinTest.xlsx'
out_table= r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\JoinTest.gdb'
# Perform the conversion
join_table= arcpy.ExcelToTable_conversion(in_excel, out_table)
print join_table
# Join
# Set the local parameters
inFeatures = r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\CDDprojects.shp'
joinField =
joinTable = join_table
fieldList = ["PLN", "Contract", "Phase", "Length", "NTP", "SC", "Notes]
Я не уверен, что ввести в joinField и если есть любой другой код, который я должен включать.
ПЕРЕСМОТР 1: Я использовал код Итана, но получил сообщение об ошибке по адресу:
with master_table.open():
with minimal_table.open():
minimal_index = dbf.create_index(minimal_table, lambda record: record.name)
Ошибка гласит:
Traceback (most recent call last):
File "W:\Engineering\ENGINEER\LAMP (062012)\Database\VisualDatabase\LAMP.py", line 53, in <module>
with master_table.open():
AttributeError: 'Result' object has no attribute 'open'
ПЕРЕСМОТР 2: Я начальный уровень, так может быть, я что-то довольно простое. Когда я пытаюсь импортировать DBF, я получаю ошибку после того, как мой код:
Traceback (most recent call last):
File "W:\Engineering\ENGINEER\LAMP (062012)\Database\VisualDatabase\LAMP.py", line 50, in <module>
import dbf
ImportError: No module named dbf
Я скачал модуль DBF, но при запуске установки, я получаю эту ошибку:
Warning (from warnings module):
File "C:\Python27\ArcGIS10.3\lib\distutils\dist.py", line 267
warnings.warn(msg)
UserWarning: Unknown distribution option: 'install_requires'
Я m не уверен, что я делаю неправильно, чтобы установить dbf.
REVISION 3: Я установил модуль dbf и успешно импортирован в дугу.Тем не менее, я все еще получаю то же сообщение об ошибке:
Traceback (most recent call last):
File "W:\Engineering\ENGINEER\LAMP (062012)\Database\VisualDatabase\LAMP.py", line 56, in <module>
with master_table.open():
AttributeError: 'Result' object has no attribute 'open'
Мой код:
#Convert xlsx to table:
import xlrd
in_excel= r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\JoinTest.xlsx'
out_table= r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\JoinTest.gdb'
# Perform the conversion
join_table= arcpy.ExcelToTable_conversion(in_excel, out_table)
import enum
import dbf
# table with all projects at all stages
master_table = join_table
# table with single project and most up-to-date stage
minimal_table = r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\CDDprojects.dbf'
with master_table.open(): (LINE 56 which the AttributeError calls)
with minimal_table.open():
minimal_index = dbf.create_index(minimal_table, lambda record: record.name)
# cycle through master, updating minimal if necessary
for master in master_table:
# look for PLN # first
found = minimal_index.search(master.PLN)
if not found:
# if record doesn't exist with PLN #, try CONTRACT #
found = minimal_index.search(master.Contract)
Я использую модуль DBF здесь: https://pypi.python.org/pypi/dbf
Спасибо.
Параметр 'AttributeError' ссылается на' «Результат» object' - там нет таких вещей в моем 'dbf' пакете - есть другие' dbf', который используется вместо шахты ? –
Вы правы. Однако у меня возникают проблемы с командой «import dbf». См. Пересмотренный вопрос. –
@Ethan После импорта dbf, я все еще получаю тот же атрибут AttributeError, который ссылается на объект Result. Я импортирую xlrd для преобразования моего листа excel в таблицу dbf ... может ли xlrd быть в конфликте с модулем dbf? –