Этот вопрос звучит просто излишне ...
Во всяком случае, меня попросили изучить использование SQL в ArcGIS. Мы используем SDE DB для всех серверных хранилищ и управления БД / крупномасштабного редактирования. Однако я пытаюсь глубже понять, насколько интегрирован SQL в инструментах ArcGIS. В справочном руководстве по SQL-запросам в ArcGIS 10 есть примечание, в котором четко указано, что синтаксис SQL не работает при использовании инструмента Калькулятор поля. Я нахожу это очень разочаровывающим, так как было бы очень полезно иметь возможность извлекать и обрабатывать информацию непосредственно из самой базы данных при вычислении значений полей.
Каковы наибольшие ограничения и подводные камни, с которыми можно столкнуться при попытке использовать SQL в ArcGIS? Какие инструменты видят лучшую функциональность при интеграции с SQL?
Если требуется пример, чтобы сделать этот вопрос более ясным, я пытаюсь отследить количество точек интереса определенного типа в данном регионе. Каждая точка имеет атрибут, который описывает ее тип и регион. Мое текущее решение включает интенсивное использование курсоров для подсчета и извлечения данных, но начальник указал, что простой SQL-запрос может сделать все это и даже больше. К сожалению, кажется, что функциональности нет для этого.
Или это?
Ответы:
Если вы хотите использовать Python, взгляните на команду ArcSDESQLExecute . Это позволит вам выполнить произвольный SQL, но он должен быть подключен через SDE. Если результатом запроса является набор строк, атрибуты будут возвращены в виде списка списков Python. В противном случае он вернет True, если SQL был выполнен успешно, или None, если нет. Смотрите также: Выполнение SQL с использованием соединения ArcSDE
источник
Если вы пишете пользовательские объекты ArcObject, вы можете выполнить произвольный SQL для рабочей области SDE, используя метод ExecuteSQL . Этот метод ограничен запросами, которые не возвращают наборы результатов, такие как INSERT, UPDATE или некоторые хранимые процедуры.
Если вы работаете через пользовательский интерфейс ArcMap, ваши возможности немного ограничены. Причина, по которой вы не можете использовать SQL через Calculate Field, заключается в том, что на самом деле это выражение VBScript и / или Python. Вы можете использовать VBScript или Python для выполнения произвольного выражения SQL и извлечения значений из полученного курсора, но я бы не рекомендовал это.
Кроме того, вы можете использовать ответ Риган и создать слой запроса. Для данных только для чтения, это ваш лучший подход. Если вам нужно обновить данные, это немного сложнее. Вам нужно будет создать слой запроса с вашими «новыми» значениями, выполнить объединение с существующей таблицей, а затем использовать поля вычисления. Это может быть объединено с ExecuteSQL для выполнения сложных обновлений и последующего просмотра результатов (что-то неуклюжее).
Ваша последняя альтернатива - напрямую выполнять SQL для таблиц ArcSDE.
источник
Вы должны проверить Query Layers в ArcMap 10
источник
В зависимости от того, какую СУБД вы используете, вы можете использовать библиотеки SQL вне ArcObjects или arcpy, если вы не зависите от получения данных объектов. Многие запросы в базе данных SQL Server, которые я использую ежедневно, не носят пространственного характера, поэтому я буду использовать классы System.Data внутри .NET или библиотеку Python pymssql внутри приложений Python. Если вам требуется использование Пространственных данных, то лучше всего использовать Query Layers. Единственное предостережение с уровнями запросов - они работают только с данными, хранящимися с использованием пространственных типов данных (не стандартного типа SDEBINARY).
источник