Arcpy kullanmadan shapeprofiling shapefiles için Python Script örnekleri


33

Niteliklere göre bir shapefile sorgulamak, seçimden yeni bir katman oluşturmak ve bir çokgenin alanlarını hesaplamak ve çokgenleri noktalara dönüştürmek gibi şeyler yapmak için arcpy temelli olmayan bir Python betiği kullanmak istiyorum.

Diğer Python modüllerini veya kitaplıklarını kullanma konusunda herhangi bir kod örneği var mı? Arctic kullanarak bunu kolayca yapabiliyorum ama diğer seçenekleri araştırmak istedim.


geopandas vektör dosyaları için senin arkadaşın. Raster için Rasterio.
RutgerH

Yanıtlar:


54

Bu garip, sanki insanlar aniden Python'un gücünü keşfettiler (diğerleri arasında yalnızca bir Python modülü olan ArcPy olmadan), örneğin Python'daki Visualize shapefile sorusuna bakın :

  • Python'daki coğrafi işlemlerin çok uzun bir geçmişi vardır, Arcpy'den çok daha eski (ya da arcgcripcripting) -> burada Paul'un söylediği gibi ArcPy'nin yeteneklerini "taklit etmiyor", çoğu zaten ArcPy'den önce oradaydı.
  • Python modülleri için referans Python Paket Endeksi ( Pypi ) ve özel bir bölüm var: Topic :: Scientific / Engineering :: GIS
  • Bu modüllerle her şeyi yapabilirsiniz ve ArcPy'den daha kolay ve hızlıdır çünkü saf Python'dur (imleç yok ...).
  • Jeo-uzamsal geometrileri işlemek için bu modüllerden biri de aynıdır -> çokgen alanlarını hesaplayın ve çokgenleri noktalara dönüştürün ..
  • Vektör katmanlarını işlemek istiyorsanız, osgeo / ogr , Fiona veya Pyshp (ve diğerleri, daha az kullanılmış) vardır -> niteliklere göre bir şekil dosyasını sorgula, seçimden yeni katman oluştur, çokgenin alanlarını hesapla, çokgenleri noktalara dönüştür
  • rasterleri işlemek için standart osgeo / gdal
  • mekansal analiz için Pysal var
  • 3D için, numpy veya scipy gibi diğer Scientific modüllerini kullanabilirsiniz (3D algoritmaları, ızgaralar, aynı zamanda istatistikler, geostatistics, 2D veya 3D)
  • Ve mapnik , matplotlib / basemap , Geodjango ve ... hakkında konuşmam .

Hepsini (Pysal ile düzgün şekilde ...) birleştirebilir ve diğer Bilimsel modüllerle karıştırabilirsiniz.

Bu nedenle, Python Script örnekleri için, gys.stackexchange veya internette ogr, gdal veya düzgün Pyshp Fiona'yı arayın (sadece İngilizce değil birçok örnek).
Onlardan biri Fransızca (scriptler ve şekiller evrenseldir!):
- Python: CBS yazılımı olmadan vektör ve jeolojik perspektifte kafes katmanları kullanarak
İngilizce bir diğer:
- Python, düzgün ve Fiona ile CBS
ve İspanyolca
- köşe koordinatlarını kullanarak düzensiz çokgen alanlarının tespiti
gis.stackexchange içinde
- Yükseklik profili, hattın her iki yanında 10 km.
- Pyshp kullanarak Özniteliklerin Güncellenmesi
- Bir rasterden 3D şekil dosyası nasıl oluşturulur?
- İki nokta arasındaki yükseklik farkını elde etmek için Python Script
- etc

Aaron tarafından sunulan senaryo, yalnızca Python sözlüklerini kullanan Fiona ile daha basit bir şekilde yazılabilir:

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')

ve ek olarak düzgün kullanırsanız:

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')

Ayrıca iki kitap var:

Eric Westra'nın Piton Mekansal Gelişimi .

görüntü tanımını buraya girin

Joel Lawhead Python ile Mekansal Analizi Öğrenme

görüntü tanımını buraya girin

Python ayrıca QGIS (Quantum GIS), GRASS GIS, gvSIG veya OpenJump veya Paraview (ve Blender !) Gibi 3D modelleyiciler gibi diğer GIS uygulamalarında bir betik dili olarak kullanılır . Jeo uzamsal modüllerin çoğunluğunu tüm bu uygulamalarda kullanabilirsiniz (bkz. QGIS verilerini Blender ile görselleştirme ).


Bu konuştuğun Python meselesi nedir;)
Nathan W

Fiona, Windows'ta bir DLL hatası atıyor gibi görünüyor.
multigoodverse

Fiona'yı nasıl kurdun? benim için sorun değil
gen

19

USU sitesini , başlamak için Açık Kaynak GIS kullanarak Python ile Geoprocessing'i tavsiye ederim . Genellikle egzersizler sırasında GDAL / OGR kütüphanesini kullanırlar. GDAL / OGR'yi yüklemek biraz zor olabilir, bu yüzden bu blog girişi sizin için yararlı olabilir: Windows'ta Python için GDAL (ve OGR) kurulumu . Ayrıca GIS.SE'de Arcpy kullanmanın Alternatiflerini inceleyin.

Aşağıdaki açık kaynaklı coğrafi işlem komut dosyası örneği (USU sitesinden), nitelik verilerini çıkarmak ve bir metin dosyasına yazmak için kullanılır:

# 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
.Destroymüthiş bir yöntem adı: p
Jason

5

GDAL / OGR ile ilgilenebilirsiniz .

GDAL, rasterleri işlemek için kullanılırken, OGR vektörler için kullanılır. Her ikisi de açık kaynak kütüphanelerdir.

ArcPy'ye biraz bağımlılık yapmak istiyorsanız, bilgileri bir diziye okuyarak ve kendi hesaplamalarınızı saf Python'da çalıştırarak bazı yetenekleri taklit edebilirsiniz.

Son zamanlarda, burada görüldüğü gibi, bir çokgenin içindeki noktaları seçerek yaptım . Poligonun köşelerinin koordinatları verilen bir noktanın bir poligon içinde olup olmadığını belirlemek için ışın döküm algoritmasını kullanır.


1
Lütfen, sayfayı ziyarete ve okumaya gitmeden önce, çözümün özünü yeterince kavrayarak ve anlayabileceğiniz şekilde ekleyin. Zamanla o sayfa muhtemelen bu adreste olmayacak, bu cevabı çok da kullanışlı değil. :)
matt wilkie

1

Bunu kişisel olarak hiç kullanmadım, ama ofiste başkaları da kullanmaktan hoşlanıyor: https://pypi.python.org/pypi/Shapely


Bazı örnek kodları düzgün kullanarak gönderme şansın var mı?
sherpas,


5
Link sadece cevaplar, kaçınılmaz olarak kırıldıkları için uzun vadede yardımcı olmuyor. Lütfen varış yeri hakkında, a) yeni evinin yeniden keşfedilebileceği ve b) sayfanın ziyaret edilmeden ve okunmadan önce çözümün özünün kavranıp anlaşılabileceği hakkında yeterince bilgi ekleyin.
matt wilkie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.