Примеры скриптов Python для геообработки шейп-файлов без использования arcpy


33

Я хотел бы использовать скрипт Python, не основанный на arcpy, для выполнения таких задач, как запрос шейп-файла по атрибутам, создание нового слоя из выделения, вычисление областей многоугольника и преобразование многоугольников в точки.

У кого-нибудь есть примеры кода использования других модулей или библиотек Python? Я могу сделать это легко, используя arcpy, но я хотел изучить другие варианты.


геопанда ваш друг для векторных файлов. Растерио для растра.
RutgerH

Ответы:


54

Это странно, как если бы люди внезапно обнаружили мощь Python (без ArcPy, который является всего лишь одним модулем Python среди других), см., Например, вопрос Визуализация шейп-файла в Python :

  • геопространственная обработка в Python имеет очень долгую историю, намного старше, чем Arcpy (или arcgisscripting) -> здесь нет «имитации» возможностей ArcPy, как говорит Пол, большинство из них уже были там до ArcPy.
  • Ссылка на модули Python - это индекс пакетов Python ( Pypi ), а также есть специальный раздел: Тема :: Научно-технические разработки :: ГИС
  • с этими модулями вы можете делать что угодно, и это часто проще и быстрее, чем ArcPy, потому что это чистый Python (без курсоров ...).
  • Shapely - один из этих модулей для обработки геопространственных геометрий -> расчета площадей многоугольника и преобразования многоугольников в точки.
  • если вы хотите обрабатывать векторные слои, есть osgeo / ogr , Fiona или Pyshp (и другие, менее используемые) -> запросить шейп-файл по атрибутам, создать новый слой из выделения, вычислить области многоугольника, преобразовать многоугольники в точки
  • для обработки растров, стандартом является osgeo / gdal
  • для пространственного анализа есть Pysal
  • для 3D вы можете использовать другие научные модули, такие как numpy или scipy (3D алгоритмы, сетки, а также статистика, геостатистика, 2D или 3D)
  • И я не говорю о mapnik , matplotlib / basemap , Geodjango и ...

Вы можете объединить все (Pysal с shapely, ...) и смешать их с другими научными модулями.

Таким образом, для примеров сценариев Python найдите Pyshp Fiona, ogr, gdal или shapely в gis.stackexchange или в Интернете (много примеров, не только на английском).)
Один из них на французском языке (сценарии и рисунки универсальны!):
- Python: использование векторных и растровых слоев в геологической перспективе, без программного обеспечения ГИС,
другое на английском языке:
- ГИС с Python, Shapely и Fiona
и на испанском языке
- Определение областей неправильных многоугольников с использованием координат вершин
в gis.stackexchange
- Профиль высоты 10 км с каждой стороны линии
- Обновление атрибутов с помощью Pyshp
- Как создать 3D-файл формы из растра?
- Python Script для получения разницы высот между двумя точками и
т. Д.

Сценарий, представленный Аароном, можно написать проще с помощью Fiona, которая использует только словари Python:

import fiona
with fiona.open('sites.shp', 'r') as input:
    with open('hw1a.txt', 'w') as output:
       for pt in input:
           id = pt['properties']['id']
           cover = pt['properties']['cover']
           x = str(point['geometry']['coordinates'][0])
           y = str(point['geometry']['coordinates'][21])
           output.write(id + ' ' + x + ' ' + y+ ' ' + cover + '\n')

и если вы используете стройный в дополнение:

from shapely.geometry import shape
with fiona.open('sites.shp', 'r') as input:
    with open('hw1a.txt', 'w') as output:
       for pt in input:
           id = pt['properties']['id']
           cover = pt['properties']['cover']
           x = str(shape(pt['geometry']).x)
           y = str(shape(pt['geometry']).y)
           output.write(id + ' ' + x + ' ' + y+ ' ' + cover + '\n')

Есть также две книги:

Python Geospatial Development Эрика Вестра.

введите описание изображения здесь

Изучение геопространственного анализа с помощью Python of Joel Lawhead

введите описание изображения здесь

Python также используется в качестве языка сценариев в других ГИС-приложениях, таких как QGIS (Quantum GIS), GRASS GIS, gvSIG или OpenJump, или в 3D-моделлерах, таких как ParaviewBlender !). И вы можете использовать большинство геопространственных модулей во всех этих приложениях (см. Визуализация данных QGIS с помощью Blender )


Что это за штука из Python, о которой ты говоришь;)
Натан W

Фиона, похоже, выдает ошибку DLL в Windows.
multigoodverse

Как вы установили Фиона? нет проблем для меня
ген

19

Я настоятельно рекомендую начать геообработку сайта USU с использованием Python с использованием ГИС с открытым исходным кодом . В основном они используют библиотеку GDAL / OGR на протяжении всего упражнения. Установка GDAL / OGR может быть сложной задачей, поэтому эта запись в блоге может быть вам полезна: Установка GDAL (и OGR) для Python в Windows . Также ознакомьтесь с альтернативами использованию Arcpy на GIS.SE.

Следующий пример сценария геообработки с открытым исходным кодом (с сайта USU) используется для извлечения данных атрибутов и записи их в текстовый файл:

# import modules
import ogr, os, sys

# set the working directory
os.chdir('f:/data/classes/python/data')

# open the output text file for writing
file = open('hw1a.txt', 'w')

# get the shapefile driver
driver = ogr.GetDriverByName('ESRI Shapefile')

# open the data source
datasource = driver.Open('sites.shp', 0)
if datasource is None:
  print 'Could not open file'
  sys.exit(1)

# get the data layer
layer = datasource.GetLayer()

# loop through the features in the layer
feature = layer.GetNextFeature()
while feature:

  # get the attributes
  id = feature.GetFieldAsString('id')
  cover = feature.GetFieldAsString('cover')

  # get the x,y coordinates for the point
  geom = feature.GetGeometryRef()
  x = str(geom.GetX())
  y = str(geom.GetY())

  # write info out to the text file
  file.write(id + ' ' + x + ' ' + y + ' ' + cover + '\n')

  # destroy the feature and get a new one
  feature.Destroy()
  feature = layer.GetNextFeature()

# close the data source and text file
datasource.Destroy()
file.close()

4
.Destroyэто удивительное имя метода: p
Джейсон

5

Вы можете быть заинтересованы в GDAL / OGR .

GDAL используется для обработки растров, а OGR - для векторов. Обе библиотеки с открытым исходным кодом.

Если вы хотите удалить некоторую зависимость от ArcPy, вы можете имитировать некоторые возможности, читая информацию в массив и выполняя ваши собственные вычисления на чистом Python.

Я недавно сделал это с помощью выбора точек в многоугольнике, как показано здесь . Он использует алгоритм наведения лучей, чтобы определить, находится ли точка внутри многоугольника, учитывая координаты вершин многоугольника.


1
Пожалуйста, включите достаточно сути решения можно понять и понять, прежде чем посетить и прочитать страницу. Со временем эта страница, вероятно, не будет по этому адресу, что делает этот ответ не очень полезным. :)
Matt Wilkie

1

Я никогда не использовал это лично, но другие в офисе любят использовать аккуратно: https://pypi.python.org/pypi/Shapely


Есть ли шанс, что вы можете опубликовать несколько примеров кода, используя shapely?
шерп


5
Ответы, содержащие только ссылки, бесполезны в долгосрочной перспективе, поскольку они неизбежно нарушаются. Пожалуйста, включите достаточно информации о месте назначения, чтобы: а) его новый дом можно было заново открыть, и б) суть решения можно понять и понять, прежде чем посетить и прочитать страницу.
Мэтт Уилки
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.