셰이프 파일의 다각형을 사용하지만 내 응용 프로그램의 속성을 추가하여 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()
지오 코드 (self.geomdict)를 사용하여 사전에 모든 지오메트리를 갖기 때문에 단순히 피처를 작성하고 필드를 설정하고 기존 레이어에서 지오메트리를 복제합니다 (간단하게하기 위해 해당 레이어를 코드로드하지 않음). 이제 필요한 것은 필드와 도형의 조합에서 GeoJSON을 생성하는 방법입니다 .OGR의 도움으로 자연스럽게 파일의 나머지 부분을 소스 맵에서 얻을 수 있습니다 (CRS 등).
위와 같이 생성 된 기능 모음을 내보내는 방법은 무엇입니까?