Programlı olarak bir şekil dosyasındaki çokgenler kullanarak ancak kendi uygulamamdan öznitelikler ekleyerek bir GeoJSON dosyası oluşturmak istiyorum.
Bu bir şekil dosyası için kolayca yapılır:
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()
coğrafi kod (self.geomdict) ile sözlükte tüm geometrilere sahip olduğum için, sadece özellikleri oluşturuyorum, alanları ayarlıyorum ve geometrileri önceden var olan katmandan klonluyorum (basitlik için bu katmanı kod yüklemesi atlanmıştı). Şimdi ihtiyacım olan tek şey GeoJSON'u, alan ve geometrilerin birleşiminden, doğal olarak dosyanın geri kalanını (kaynak haritasından olduğu gibi CRS, vb.) Almak için OGR yardımı ile oluşturmanın bir yoludur.
Yukarıdaki gibi oluşturulan özellik koleksiyonu nasıl dışa aktarılır?