ฉันพยายามสร้างฟังก์ชั่นที่ทำสิ่งเดียวกันกับที่ QGIS "ละลาย" ฟังก์ชั่น ฉันคิดว่ามันจะง่ายสุด ๆ แต่ก็ดูเหมือนจะไม่ดี ดังนั้นจากสิ่งที่ฉันรวบรวมได้การใช้ฟิโอน่ากับหุ่นดีควรเป็นตัวเลือกที่ดีที่สุดที่นี่ ฉันเพิ่งเริ่มยุ่งเกี่ยวกับไฟล์เวคเตอร์ดังนั้นโลกนี้ก็ค่อนข้างใหม่สำหรับฉันและไพ ธ อนเช่นกัน
สำหรับตัวอย่างเหล่านี้ฉันทำงานกับ County shapefile ก่อตั้งขึ้นที่นี่http://tinyurl.com/odfbanu ดังนั้นนี่คือรหัสบางส่วนที่ฉันรวบรวม แต่ไม่สามารถหาวิธีที่จะทำให้พวกเขาทำงานร่วมกันได้
สำหรับตอนนี้วิธีที่ดีที่สุดของฉันคือต่อไปนี้ขึ้นอยู่กับ: https://sgillies.net/2009/01/27/a-more-perfect-union-continued.html มันใช้งานได้ดีและฉันได้รับรายชื่อของ 52 รัฐเป็นรูปทรงเรขาคณิตที่ดี โปรดแสดงความคิดเห็นหากมีวิธีที่ตรงไปข้างหน้ามากขึ้นในการทำส่วนนี้
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.
ดังนั้นการเขียนจึงไม่ได้ตรงไปตรงมาจากสิ่งที่ฉันได้เห็นฉันแค่อยากให้ไฟล์รูปร่างเดียวกันกับประเทศที่ละลายในอเมริกาฉันไม่ต้องการตารางคุณลักษณะมากนัก แต่ฉันอยากรู้ว่าคุณจะผ่านได้อย่างไร จากบนไปยังไฟล์รูปร่างที่สร้างขึ้นใหม่
ฉันพบรหัสหลายชิ้นสำหรับเขียนด้วย fiona แต่ฉันไม่สามารถทำให้มันทำงานกับข้อมูลของฉันได้ ตัวอย่างจากวิธีการเขียนรูปทรงเรขาคณิตที่ดีไปยังรูปร่างไฟล์ได้อย่างไร :
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},
})
ปัญหานี่คือวิธีการทำแบบเดียวกันกับรายการของรูปทรงเรขาคณิตและวิธีการสร้างคุณสมบัติเดียวกันมากกว่าแหล่งที่มา