Как я могу преобразовать файл Excel с x, y столбцами в шейп-файл?

26

Как я могу преобразовать файл Excel с x, y столбцами в точечный шейп-файл?

Есть несколько необязательных требований в дополнение к правильному созданию шейп-файла:

  1. Типы столбцов (согласно спецификаторам формата Excel) должны быть сохранены (особенно типы даты)
  2. Имена столбцов должны быть взяты из заголовка
  3. Я хотел бы сделать это из командной строки
  4. Если бы я мог включить гетерогенные пространственные привязки для точек в третьем столбце, я был бы очень рад :)
fmark
источник
посмотрите на этот gis.stackexchange.com/questions/86369/…
AndroidNijx

Ответы:

24

Я бы рекомендовал использовать OGR / GDAL , который является частью библиотеки GDAL . OGR поддерживает виртуальный формат, который позволяет спецификацию через файл XML. Если вы конвертируете свой лист Excel в CSV, вы можете создать VRT для доступа к данным.

Предполагая, что у вас есть что-то вроде этого example.csv:

Lat,Long,Year,Name
34.0,-120.0,2010-05-01,Off Santa Rosa Island

Вы можете создать VRT example.vrtследующим образом:

<OGRVRTDataSource>
    <OGRVRTLayer name="example">
        <SrcDataSource>example.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="Long" y="Lat"/>
    </OGRVRTLayer>
</OGRVRTDataSource>

Начиная с GDAL 1.7, вы можете дополнительно указать типы данных полей атрибутов, используя <Field>элемент внутри <OGRVRTLayer>, например:

    <Field name="date" src="Year" type="Date" />

Помните, что шейп-файлы хранят атрибуты в формате DBASE IV , который обладает меньшей гибкостью в типах данных, чем Excel. После того, как вы определили свой VRT-файл, вы можете использовать обычный набор инструментов OGR для преобразования данных в Shapefile:

ogr2ogr -f "ESRI Shapefile" example.shp example.vrt

К сожалению, # 4 невозможен - спецификация шейп-файла допускает одну проекцию (которую можно увидеть здесь example.prjпосле последнего шага).

SCW
источник
Единственным недостатком этого является то, что мне нужно вычислить типы данных столбцов программно, чтобы написать <Field>тег. Я думаю, что я выясню это самостоятельно :)
fmark
Правильно. Если вы хотите автоматизированное решение и имеете доступ к ArcGIS, вы можете сделать это с помощью инструмента Добавить координаты XY tinyurl.com/38jm55k , который должен сделать этот шаг за вас.
SCW
Важным соображением является получение вашего файла Excel в формате, подходящем для шейп-файла ESRI, в первую очередь - существуют ограничения на имена столбцов, длину имен и, если вы используете инструмент Add XY, способ, которым ESRI автоматизирует тип поля, что может привести к вопросы. webhelp.esri.com/arcgisdesktop/9.2/…
spg
3
Онлайн-сервис, помогающий создать правильно отформатированный файл vrt: vrtbuilder.appspot.com
matt wilkie
9

Вы можете использовать плагин с разделителями текста, который поставляется вместе с QGIS (http://qgis.org ), чтобы загрузить текстовый файл и затем сохранить его как шейп-файл.

gsherman
источник
Я часто страдаю от ошибок синтаксического анализатора, используя этот инструмент. Любой совет?
Fmark
1
У вас есть конкретные примеры?
Гершерман
@fmark - я тоже получаю эти ошибки, и обычно это происходит из-за того, что MS Excel обрабатывает csv
dassouki
6

Хотя это и не из командной строки, вы можете сделать это в ArcGIS App. Начиная с 9.3.1, просто добавьте XLS прямо в ArcMap. Создайте XY Event Layer из XLS (то есть выберите столбцы X, Y и установите пространственную привязку ur). Затем экспортируйте этот XY Event Layer в новый .shp. Это можно легко автоматизировать с помощью простого сценария на языке Python / VBA или модели в построителе моделей. , Буду рад помочь вам в этом базовом рабочем процессе, если вам нужно больше информации.

Саймон
источник
1
Если вы используете Python, вы можете запустить инструмент геообработки из командной строки.
2010 года
6

Я искал, но не смог найти страницу справки по отображению данных XY в веб-справке, но процесс прост.

  1. Используйте Добавить данные (или перетащите из окна Каталога), чтобы найти свой рабочий лист (в электронной таблице) и добавить его на карту.
  2. Щелкните правой кнопкой мыши, чтобы выбрать и использовать Отображение данных XY, чтобы добавить слой события
  3. Щелкните правой кнопкой мыши на только что созданном слое событий и используйте Data | Export Data, чтобы создать шейп-файл.

Для этого вам нужен только уровень лицензии ArcView (Basic) для ArcGIS (for) Desktop.

PolyGeo
источник
Нужно ли что-то делать с верхними столбцами, которые не являются частью данных?
Зоран
Какие два столбца не являются частью ваших данных? Процедура, которую я описал, должна использовать любые столбцы long / lat, которые вы выберете, чтобы сгенерировать геометрию точек, а затем, я думаю, сохранить остальные как их атрибуты. Лучше всего попробовать это, и если результат не соответствует ожидаемому, то опишите свое наблюдаемое и ожидаемое.
PolyGeo
Думайте, что я неправильно прочитал top для двоих - и я предполагаю, что вы имеете в виду верхний ряд (заголовков). Они должны просто стать именами полей после добавления данных.
PolyGeo
Не уверен, что это все еще так, но пробелы в именах заголовков в файле Excel были настоящей головной болью для Add XY.
Чед Купер
1
Загрузка файлов Excel непосредственно в ArcGIS прекрасно работает - кроме случаев, когда это не так! На что обратить внимание: даты искажены, числа урезаны. Первым шагом по устранению неполадок всегда является экспорт в CSV со всеми столбцами, определенными в виде текста, и загрузка их вместо этого для решения проблемы. Это предостережение в сторону. Отображение как X / Y работает очень хорошо.
Мэтт Уилки
4

Там всегда авантюрный вариант. Вы можете написать файл формы самостоятельно. ESRI публикует спецификации для шейп-файлов, которые вы можете прочитать здесь:

http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Вам также может понадобиться написать файл DBF. Вы можете прочитать о формате здесь:

http://www.clicketyclick.dk/databases/xbase/format/dbf.html#DBF_STRUCT

Это, несомненно, излишне, но это даст вам преимущество контроля над всем процессом.

Скотт Вишневски
источник
Я на самом деле склоняюсь к этому - я буду использовать OGR вместо непосредственного написания шейп-файла!
Fmark
2
Excel, вероятно, может писать DBF напрямую, хотя у меня были разные уровни успеха, использующие эти DBF как компонент DBF шейп-файла.
mwalker
Excel не записывает файлы DBF.
user30184
3

Я лично предпочитаю использовать FME от Safe Software (http://www.safe.com), который не только позволяет мне наносить точки из значений XY, но и дает мне гибкость для преобразования координат из одной проекции в другую перед построением, укажите тип разделителя, начальная строка (в случае, если текстовый файл содержит информацию заголовка), прикрепление атрибутов, если в текстовом файле есть X, Y, информация об атрибутах для данных точек. Если вам нравится визуализировать эти данные в Google Планета Земля, вы можете записать их в формате KML, указав при этом стиль точек KML. ~ SRG

SRG
источник
2

Если вы хотите выполнить некоторую другую обработку данных x, y, вы можете загрузить данные в postgres, использовать geomfromtext с конкатенацией для создания типа данных геометрии, а затем использовать pgsql2shp для экспорта в форму. Этот подход также позволит вам сохранить гетерогенные данные системы пространственной привязки в другом столбце, который вы затем сможете использовать для преобразования всех ваших точек в общую систему координат в БД перед экспортом в форму. Я понимаю, что это включает в себя больше шагов, чем OGR / GDAL, но это даст вам гораздо больше гибкости.

Джон Пауэлл
источник
Я использовал этот подход в прошлом, и он хороший. Я думаю, что моим постоянным камнем преткновения здесь является надежное определение типов данных Excel ...
fmark
1
Я полагаю, вы могли бы написать что-то в Excel vba, чтобы сначала переставить столбцы, чтобы даты, x, y всегда были первыми 3 столбцами. Без каких-либо соглашений об именах столбцов, я думаю, было бы трудно полностью автоматизировать то, что вы имеете в виду.
Джон Пауэлл
1

Как насчет загрузки ваших CSV-файлов в spatiallite и последующего использования OGR или QGIS для экспорта в шейп-файл.

http://www.gaia-gis.it/spatialite-2.2/index.html

Вы даже можете напрямую экспортировать из пространственного объекта в шейп-файл.

http://www.gaia-gis.it/spatialite-2.2/spatialite-2.2_tutorial.html#t3.1

TheSteve0
источник
Spatialite может импортировать файлы Excel напрямую, если они имеют старый формат .xls (Excel 97-2003). Координаты X и Y должны быть преобразованы в целую геометрию с SQL после первоначального импорта.
user30184
Если вы не возражаете против использования Java, вы можете использовать проект POI для копирования файлов Excel, а затем использовать GeoTools для написания нового шейп-файла
TheSteve0
0

Для более простого преобразования вы можете использовать преобразователь 2Dpointreplacer в FME 2013. Необходимо указать, в каких столбцах расположены значения X и Y, а затем FME преобразует эти значения, например, в файл формы с точками.
Имена и типы столбцов могут быть установлены по мере необходимости

Стоп-кадр
источник