Temelde QGIS "çözülür" işlevi aynı şeyi yapan bir işlev oluşturmaya çalışıyorum. Süper kolay olacağını düşündüm ama görünüşe göre değil. Bu yüzden topladığım şeyden, fiona'nin düzgün bir şekilde kullanılması burada en iyi seçenek olmalı. Sadece vektör dosyaları ile uğraşmaya başladım, bu yüzden bu dünya benim ve python için de oldukça yeni.
Bu örnek için, burada kurulmuş bir ilçe şekil dosyası ile çalışıyorum http://tinyurl.com/odfbanu İşte burada topladığım ancak birlikte çalışmasını sağlamak için bir yol bulamıyorum
Şimdilik en iyi yöntemim şu şekildedir: https://sgillies.net/2009/01/27/a-more-perfect-union-continued.html . İyi çalışıyor ve 52 durumun bir listesini Shapely geometry olarak alıyorum. Bu bölümü yapmanın daha basit bir yolu varsa lütfen yorum yapmaktan çekinmeyin.
from osgeo import ogr
from shapely.wkb import loads
from numpy import asarray
from shapely.ops import cascaded_union
ds = ogr.Open('counties.shp')
layer = ds.GetLayer(0)
#create a list of unique states identifier to be able
#to loop through them later
STATEFP_list = []
for i in range(0 , layer.GetFeatureCount()) :
feature = layer.GetFeature(i)
statefp = feature.GetField('STATEFP')
STATEFP_list.append(statefp)
STATEFP_list = set(STATEFP_list)
#Create a list of merged polygons = states
#to be written to file
polygons = []
#do the actual dissolving based on STATEFP
#and append polygons
for i in STATEFP_list :
county_to_merge = []
layer.SetAttributeFilter("STATEFP = '%s'" %i )
#I am not too sure why "while 1" but it works
while 1:
f = layer.GetNextFeature()
if f is None: break
g = f.geometry()
county_to_merge.append(loads(g.ExportToWkb()))
u = cascaded_union(county_to_merge)
polygons.append(u)
#And now I am totally stuck, I have no idea how to write
#this list of shapely geometry into a shapefile using the
#same properties that my source.
Bu yüzden yazı gerçekten gördüğümden çok ileri değil, sadece aynı ülke sadece devletlerin çözülmesiyle birlikte istiyorum, özellik tablosunun çoğuna bile ihtiyacım yok ama nasıl geçebileceğinizi merak ediyorum kaynaktan yeni oluşturulan şekil dosyasına aktarır.
Fiona ile yazmak için birçok kod parçası buldum ama asla verilerimle çalışmasını sağlayamıyorum. Şekil dosyalarına düzgün geometriler nasıl yazılır? :
from shapely.geometry import mapping, Polygon
import fiona
# Here's an example Shapely geometry
poly = Polygon([(0, 0), (0, 1), (1, 1), (0, 0)])
# Define a polygon feature geometry with one attribute
schema = {
'geometry': 'Polygon',
'properties': {'id': 'int'},
}
# Write a new Shapefile
with fiona.open('my_shp2.shp', 'w', 'ESRI Shapefile', schema) as c:
## If there are multiple geometries, put the "for" loop here
c.write({
'geometry': mapping(poly),
'properties': {'id': 123},
})
Buradaki problem, geometri listesiyle aynı şeyin nasıl yapılacağı ve kaynaktan aynı özelliklerin nasıl yeniden yaratılacağıdır.