Tôi muốn lập trình tạo một tệp GeoJSON bằng cách sử dụng các đa giác từ một shapefile nhưng thêm các thuộc tính từ ứng dụng của riêng tôi.
Điều này được thực hiện dễ dàng cho một 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()
vì tôi có tất cả các hình học trên một từ điển bằng mã địa lý (self.geomdict) Tôi chỉ cần tạo các tính năng, đặt các trường và sao chép hình học từ lớp có sẵn (tải mã lớp mà bỏ qua cho đơn giản). Tất cả những gì tôi cần bây giờ là một cách để tạo GeoJSON từ sự kết hợp giữa các trường và hình học, một cách tự nhiên với sự trợ giúp của OGR để có được phần còn lại của tệp (CRS, v.v. như từ bản đồ nguồn)
Làm cách nào để xuất bộ sưu tập tính năng được tạo như trên?