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


33

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

У когось є якісь приклади коду використання інших модулів або бібліотек Python? Я можу це зробити легко, використовуючи arcpy, але я хотів вивчити інші варіанти.


geopandas - ваш друг для векторних файлів. Растеріо для растра.
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 з витонченими, ...) і змішати їх з іншими науковими модулями.

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

Сценарій, представлений Аароном, можна писати простіше за допомогою 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 of Joel Lawhead

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

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


Що це за матеріал Python, про який ви говорите;)
Натан В,

Fiona, здається, кидає помилку DLL у Windows.
багатоповерховий

Як ви встановили Fiona? для мене немає проблем
ген

19

Я настійно рекомендую геопроцесорувати сайт USU з Python, використовуючи GIS з відкритим кодом, щоб розпочати роботу. Вони в першу чергу використовують бібліотеку 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


Будь-який шанс ви могли розмістити кілька прикладних кодів, використовуючи стрункі?
шерпи


5
Відповіді лише на посилання з часом не корисні, оскільки вони неминуче порушуються. Будь ласка, включіть достатньо інформації про місце призначення, що: а) його новий будинок можна буде знову розкрити; б) суть рішення можна зрозуміти та зрозуміти перед відвідуванням та перегляданням сторінки.
matt wilkie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.