Не секрет, что данные из САПР-систем бывает довольно сложно загрузить и использовать в ГИС. Взаимодействие ArcGIS c CAD-данными не является исключением.
Вопрос о том, что не всегда следует (точнее ВСЕГДА НЕ следует) загружать ВСЕ данные из чертежей в ГИС, оставим за рамками этой статьи. Очень часто пользователям необходимо просто загрузить данные из DWG (DXF) в файловую или многопользовательскую базу геоданных (БГД), и уже в рамках ArcGIS исправлять эти данные для того, чтобы работать с ними.
К сожалению, дать какие-то совершенно конкретные инструкции «сделайте то-то и то-то, и данные будут загружены» невозможно.
Вы должны сами исправить свои данные для корректной работы с ними в ГИС-среде.
Автор также предупреждает вас, что все изменения данных, которые вы будете производить, могут быть некорректными и автор не несет никакой отвественности за результаты этих изменений. Для проверки корректности данных вам следует, прежде всего, визуально сравнить измененные объекты в ГИС и исходные объекты в САПР-среде.

Тем не менее, из-за регулярно встречающихся проблем с обработкой CAD-данных, мы считаем необходимым публикацию данного материала.

Получив в очередной раз порцию незагружаемых данных, мы решили провести исследование, как загрузить данные из DWG в многопользовательскую БГД так, чтобы они максимально полно и максимально корректно отображались и редактировались в ArcGIS.
Пользователи обратились с проблемой, что линейные данные из DWG не загружаются в многопользовательскую БГД. Экспорт из DWG в файловую БГД проходит успешно, но перенести (скопировать и вставить) этот класс объектов из файловой БГД невозможно, процесс выдает ошибку. Исправление геометрии средствами ArcToolBox не дает никакого результата, он не может справиться со сложностями геометрии пост-CAD’овских объектов.
Выяснилось, что:
прямое чтение DWG, его экспорт в БГД в рамках базового функционала Desktop
и
быстрый экспорт/импорт средствами модуля Data Interoperability (т.е. с помощью инструмента Toolboxes\System Toolboxes\Data Interoperability Tools.tbx\Quick Export, без специальных настроек, построения таблиц соответствия и правил экспорта)
дают примерно одинаковый результат в разрезе этой задачи, а именно: экспортировать данные сразу в многопользовательскую БГД или сделать это через промежуточную файловую БГД невозможно.
Проблемы возникают с линиями и полигонами. Точки, как правило загружаются нормально.

В результате проведенных тестов был разработан следующий рабочий процесс, который позволил получить корректные данные в многопользовательской БГД:
1. Открываете DWG в ArcCatalog, по правому клику мышки экспортируете однотипные объекты в отдельные классы объектов файловой БГД. В большинстве случаев имеет смысл сразу запустить инструмент Toolboxes\System Toolboxes\Data Management Tools.tbx\Features\Check Geometry, который исправит некорректные направления обхода контура, самопересечения границ для полигональных объектов, удалит объекты с нулевой геометрией.
2. Создаете копии полученных классов и удаляете у них все поля. кроме OID (ObjectId), Shape, Shape_Length, Shape_Area. Эти копии делаются для облегчения тестов.
3. Экспортируете линейный и полигональный классы пространственных объектов (по правому клику мышки), полученные на шаге 2, в Наборы записей XML (XML Recordset Document). При экспорте укажите, что геометрия должна экспортироваться в нормализованный вид.
Далее каждый класс обрабатываете отдельно.
4. Создаете линейный и полигональный пустые классы пространственных объектов с той же системой координат, что и у исходных данных (скорее всего это будет неизвестная СК).
5. По правому клику мышки загружате в этот новый пустой класс объекты из XML-документа, полученного на шаге 3.
6. В процессе загрузки получаете ошибку (если бы ошибок не было, вы не читали бы эту статью). Запоминаете номер объекта, на котором процесс «ломается». Этот номер отображается в строке состояния ArcСatalog (нижний правый угол).
В наших тестах ошибка звучала как «Loading XML recordset failed. Cannot convert the specified GARS notation to a geographic coordinate.»
7. Открываете этот документ в Notepad++ или XML Notepad (https://www.microsoft.com/en-us/download/details.aspx?id=7973), пытаетесь понять, чем данный объект отличается от других. Исправляете запись с геометрией этого объекта, сохраняете файл. Если используете указанные редакторы, файл можно не закрывать.
8. Возвращаетесь к п.5. Загружаете до следующей ошибки. Проверяете свое предположение из шага 7, исправляете тем же образом геометрию объекта. Сохраняете XML-файл.
Если после этой операции второй ошибочный объект тоже загружается, то можно делать массовую замену.
В нашем случае (при анализе линейных данных) проблема была в записи <MinorMajorRatio>0</MinorMajorRatio>.
После исправления всех этих записей на <MinorMajorRatio>0.00000001</MinorMajorRatio> проблема ушла.

Замечание: Читать XML-файл проще в XML Notepad, а делать массовую замену — в Notepad++.
Замечание: Учитывайте, что если процесс загрузки останавливается, например, на объекте 87, то проверять и исправлять нужно следующий объект, с номером 88.
9. Если вам повезло, то после массовой замены и сохранения XML-файла, этот файл будет полностью загружен в класс объектов файловой БГД. Если опять возникнут ошибки, повторяете шаги 5-8 до выявления всех объектов, некорректных с точки зрения ГИС.
Если вы работаете с десятками или сотнями тысяч объектов в исходных данных, то вам уже должен стать понятен смысл шага 2.

Б’ольшая часть задачи решена. Вернемся к исходным данным.
10. Экспортируете классы объектов из шага 1 в Набор записей XML (XML Recordset Document).
11. Делаете массовые замены, которые уже были сделаны в тестовых файлах на шагах 7 и 8.
12. Создаете в файловой БГД пустые классы объектов, импортируете структуру полей исходных документов. Сейчас можно убрать ненужные поля, но это необязательно. Не забудьте про систему координат!
13. Загружаете данные в эти классы из Наборов записей XML (XML Recordset Document), полученных на шаге 11.
14. Создаете в многопользовательской БГД такие же пустые классы объектов.
15. По правому клику мышки (Загрузить данные) загружаете данные в классы, созданные на шаге 14 данные из классов, полученных на шаге 13. В процессе загрузки будут также отброшены некорректные объекты.
В нашем случае это были объекты, в которых линия состояла из одной точки.
После этих операций данные оказываются в многопользовательской БГД, и с ними уже можно работать в ГИС.

Замечание: Если не делать этап экспорта в XML и загрузки из XML в БГД, то в многопользовательской БГД оказываются объекты со странным поведением (по сути странной геометрией): они то отображаются, то не отображаются в ArcMap: то есть при выборке объекта через таблицу атрибутов и при использовании «Zoom to», объект отображается, а при обычной работе он не отображается.

Но основная работа по организации данных еще впереди. Ведь все полигональные и линейные объекты из САПР после этих операций оказываются «сваленными в одну общую кучу».
Теперь нужно разработать нормальную структуру данных в БГД, с классами, подтипами, возможно, с наборами классов и с помощью выборок распределить эти данные по разработанной структуре.

Просьба: Если на шагах 7-8 вы найдете новые варианты исправлениий, присылайте на адрес support@esri-cis.ru с пометкой «дополнение к методам «борьбы» c CAD-данными», мы дополним ими данную статью. Если появятся какие-то замечания по описанию процесса, тоже присылайте.

Дополнение от 25.02.2016. Это дополнение не связано с описанным выше процессом, но связано с работой с CAD-данными в ArcGIS Desktop. Начиная с версии 10.2 и заканчивая версией 10.3.1 не работает привязка по точкам CAD-данных в ArcMap. При попытке привязать такие данные ArcMap закрывается с ошибкой. В версии 10.4 эта проблема решена.