Python'u kullanarak shapefile'nin basit tematik eşlemesi?


37

ArcGIS / ArcPy kullanmadan Python'da coğrafi verileri görselleştirmek ve bir harita yapmak istiyorum.

İnternette Python kullanarak tematik bir harita yapmayı öğrendim :

İşte denediğim bazı kodlar:

import shpUtils
import matplotlib.pyplot as plt

shpRecords = shpUtils.loadShapefile('C:\\Users\\shapefile.shp')

for i in range(0,len(shpRecords)):
    x = []
    y = []
    for j in range(0,len(shpRecords[i]['shp_data']['parts'][0]['points'])):

    tempx = float(shpRecords[i]['shp_data']['parts'][0]['points'][j]['x'])
    tempy = float(shpRecords[i]['shp_data']['parts'][0]['points'][j]['y'])
    x.append(tempx)
    y.append(tempy)
    plt.fill(x,y)

plt.axis('equal')
plt.title("Testing")
plt.show()

Ancak, bunu çalıştırdığımda, bana rastgele renkler veriyor.

Şekil dosyamın belirli bir sütununu görselleştirmek istersem, benzer kodu kullanarak bunu nasıl uygulayabilirim?

Bu sadece renk kullanımını tartıştığı yukarıda verilen bağlantıda belirsiz.

Bunu gerçekleştirmek için descartes ve PySAL gibi ekstra modüllere ihtiyacım olur mu?

Yanıtlar:


61

ArcPy'yi tanımıyorum ama yıllardır Python'da shapefiles ve raster ile çalışıyorum.

  1. Python'daki şekil dosyalarının işlenmesi için osgeo / ogr , Fiona , Pysal veya Pyshp ( shpUtils bunlardan biridir ve en çok kullanılanlardan biridir) gibi birçok modül vardır ve diğerleri için bkz. Pypi: GIS ve gis.stackexchange örnekleri ve Web (sadece İngilizce değil). Birçoğu ArcPy'den (veya arcgcripcripten) çok daha yaşlı.
  2. raster işleme için standart, osgeo / gdal kullanabilirsiniz
  3. Mekansal geometrileri işlemek için, düzgün bir şekilde var
  4. Geometri komplo için kullanabileceğiniz matplotlib ve muhtemelen Descartes , alanlar için matplotlib ait "uzantısı" değil, aynı zamanda diğer birçok modülleri, bkz plotlaması: Pypi gibi ve modülleri Mayavi (ayrıca matplotlib) 3D gösterimi için
  5. Size doğrudan 1) bir şekil dosyası okuma ve 4) Pycairo modülü ile çizim yapma imkanlarını veren mapnik gibi modüller de vardır .

Ondan sonra, bir GIS gibi:

  • Modülleri kullanmak için 1) açın, şekil dosyalarını kaydedin ve isterseniz işlemleri numpy veya scipy gibi diğer modüllerle uygulayın.
  • geometrik nesnelerin (tampon, vb.) manipülasyonu ve analizi için düzgün kullanabilirsiniz.
  • geometrileri çizmek için matplotlib'i kullanabilirsiniz, ancak matplotlib ne çizmek istediğinizi bilmiyor. Neyin çizileceğini (nitelikler, vb.) Ve nasıl olacağını belirtmek, modüller 1) veya 3) ile çalışmanızdır.

Shapefile dosyamın belirli bir sütununu görselleştirmek istersem bunu kodda nasıl uygulayabilirim?

Bu yüzden matplotib ve diğer modülleri öğrenmelisiniz. ArcPy'yi öğrenmek zorundasınız, aynı… (özellikle matplolib için internette birçok mükemmel ders var ve ArcPy'nin saf Python olduğu için daha kolay).

Sadece Python ile bazı örnekler

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

Bir niteliğe dayalı renklerle jeolojik harita (çokgen şekil dosyası)

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

Bir niteliğe göre renk içeren 3B Noktalar (PointZ shapefile)

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

Bir DEM üzerinde ve DEM yüzeyine dökülmüş bir raster üzerinde 3B noktalar (nitelik olarak z ile nokta şekli noktası) ve 3B çizgi (PolyLineZ shapefile).

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

Orijinal shapefile (Polyline shapefile) özelliklerine göre z değerleri ve renkleri olan topografik profil (jeolojik oluşumlar = Kesit)

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

Mayavi2 modüllü DEM (GeoTIFF)

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

Modülü (nitelik olarak z) DEM (ESRI ASCII ızgara, .asc) ve Nokta şekil dosyaları visvis

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

Sondaj delikleri (3D modülü ile görselleştirilmiştir, bir puan şekil dosyası (z bir nitelik olarak) bir ızgara modülleri ile hesaplanmış yüzey numpy ve matplotlib ile, nitelik (jeolojik) göre renk ile polylineZ: tampon visvis


16

Shapefiles'i hızlıca görselleştirmek istediğimde benzer problemler yaşadım ve her zaman Matplotlib'in böyle küçük bir görevi başarmak için oldukça uzun bir yol buldum. Bunun yerine "Python Geographic Visualizer" modülünü veya kısaca GeoVis'i geliştirdim. Güncelleme: v0.2.0 şimdi çok sayıda yeni fonksiyonelliğe sahip.

Bununla beraber, şekil dosyalarını görselleştirmek daha kolay olamazdı:

import geovis
geovis.ViewShapefile("C:/yourshapefile.shp")

Voila, haritayı bir Tkinter penceresinde görüntü olarak aç ve haritayı bir görüntü dosyasına da kaydedebilirsin. Bir haritaya şekillendirme, renklendirme ve çoklu katmanlar eklemek de mümkündür ve en yeni sürümde , niteliklere göre sınıflandırabilir ve belirli bir bölgeye yakınlaştırabilirsiniz . Aşağıdaki haritada geovis tüm dünyadaki GADM illerini yaklaşık 5 dakika içinde yükleyip kategorize etti. GeoVis'i buradan indirebilirsiniz, buradan nasıl kullanacağınız hakkında daha fazla bilgi edinebilirsiniz.

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

Amaç kullanım kolaylığı kadar kolay kurulumda olduğundan GeoVis, Python'u olan herhangi biri tarafından kullanılabilir ve yerleşik Tkinter Canvas'ı bir işleyici olarak kullanabildiği için başka modüller gerektirmez. Ancak, işveren olarak da kullanılabilecek ve çok daha hızlı ve daha kaliteli olan Aggdraw, PIL veya PyCairo'ya sahip olmanız veya almanız önemle tavsiye edilir.

Geri çekilme, şekil dosyanızın enlem / boylam koordinat sistemi ile desteklenmemesi gerektiğidir - henüz projeksiyonları veya dönüşümleri ele almaz.



1

2019'da python'daki bir şekil dosyasından tematik bir harita yapmanın en basit yolu jeopandalardır .

Belgelerden bir örnek: http://geopandas.org/mapping.html

import geopandas
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
world['gdp_per_cap'] = world.gdp_md_est / world.pop_est
world.plot(column='gdp_per_cap')
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.