ฉันต้องการสร้างไฟล์ GeoJSON โดยทางโปรแกรมโดยใช้รูปหลายเหลี่ยมจาก shapefile แต่เพิ่มคุณสมบัติจากแอปพลิเคชันของฉันเอง
สิ่งนี้สามารถทำได้อย่างง่ายดายสำหรับไฟล์รูปร่าง:
def create_data_dayer(self,varlist, data):
"""
Creates a new shape to contain data about nodes.
varlist is the list of fields names associated with
the nodes.
data is a list of lists whose first element is the geocode
and the remaining elements are values of the fields, in the
same order as they appear in varlist.
"""
if os.path.exists(os.path.join(self.outdir,'Data.shp')):
os.remove(os.path.join(self.outdir,'Data.shp'))
os.remove(os.path.join(self.outdir,'Data.shx'))
os.remove(os.path.join(self.outdir,'Data.dbf'))
# Creates a new shape file to hold the data
if not self.datasource:
dsd = self.driver.CreateDataSource(os.path.join(self.outdir,'Data.shp'))
self.datasource = dsd
dl = dsd.CreateLayer("sim_results",geom_type=ogr.wkbPolygon)
#Create the fields
fi1 = ogr.FieldDefn("geocode",field_type=ogr.OFTInteger)
dl.CreateField(fi1)
for v in varlist:
#print "creating data fields"
fi = ogr.FieldDefn(v,field_type=ogr.OFTString)
fi.SetPrecision(12)
dl.CreateField(fi)
#Add the features (points)
for n,l in enumerate(data):
#Iterate over the lines of the data matrix.
gc = l[0]
try:
geom = self.geomdict[gc]
if geom.GetGeometryType() != 3: continue
#print geom.GetGeometryCount()
fe = ogr.Feature(dl.GetLayerDefn())
fe.SetField('geocode',gc)
for v,d in zip (varlist,l[1:]):
#print v,d
fe.SetField(v,str(d))
#Add the geometry
#print "cloning geometry"
clone = geom.Clone()
#print geom
#print "setting geometry"
fe.SetGeometry(clone)
#print "creating geom"
dl.CreateFeature(fe)
except: #Geocode not in polygon dictionary
pass
dl.SyncToDisk()
เนื่องจากฉันมีรูปทรงเรขาคณิตทั้งหมดในพจนานุกรมโดย geocode (self.geomdict) ฉันเพียงแค่สร้างฟีเจอร์ตั้งค่าฟิลด์และโคลนรูปทรงเรขาคณิตจากเลเยอร์ที่มีอยู่ก่อน (โหลดโค้ดที่เลเยอร์ที่ละเว้นเพื่อความง่าย) สิ่งที่ฉันต้องการตอนนี้เป็นวิธีการสร้าง GeoJSON จากการรวมกันของเขตข้อมูลและรูปทรงเรขาคณิตโดยธรรมชาติด้วยความช่วยเหลือของ OGR ที่จะได้รับส่วนที่เหลือของไฟล์ที่ถูกต้อง (CRS ฯลฯ จากแผนที่ต้นฉบับ)
ส่งออกคอลเล็กชันคุณลักษณะที่สร้างขึ้นดังกล่าวได้อย่างไร