2017-04-04 21 views
0

我的数据是从census maps。我不熟悉shapefile或WKT文件,但我设法找到这个solution,我试图创建我自己的代码。Shapefile到csv与WKT多列多列

import ogr 
import csv 

#Open files 
csvfile=open("states_wkt.csv",'wb') 
ds=ogr.Open("cb_2015_us_state_20m.shp") 
lyr=ds.GetLayer() 

#Get field names 
dfn=lyr.GetLayerDefn() 
nfields=dfn.GetFieldCount() 
fields=[] 
for i in range(nfields): 
    fields.append(dfn.GetFieldDefn(i).GetName()) 
fields.append('kmlgeometry') 
csvwriter = csv.DictWriter(csvfile, fields) 

虽然这工作,我得到几何结果看起来像:

""kmlgeometry"":""<MultiGeometry> 
<Polygon><outerBoundaryIs><LinearRing><coordinates>-118.593969,33.467198 
-118.484785,33.487483 -118.370323,33.409285 -118.286261 
</coordinates></LinearRing></outerBoundaryIs></Polygon> 
<Polygon><outerBoundaryIs><LinearRing><coordinates>-118.594033,33.035951 
-118.540069,32.980933 -118.446771,32.895424 -118.353504,32.821962 -118.425634 
</coordinates></LinearRing></outerBoundaryIs></Polygon> 
</MultiGeometry> 

在我的特定情况下,我想在多面的形式返回几何数据是这样的:

MULTIPOLYGON (((-71.6062550000000044 42.0133709999999994, 
-71.5276060000000058 42.0149979999999985, -71.5169060000000059 
42.0155979999999971, -71.4999080000000049 42.0171989999999980, 
-71.3814009999999968 42.0187979999999968, -71.3815050000000042 
42.0000110000000006, -71.3812010000000043 41.9811979999999991))) 

我该如何实现这一目标?

+0

告诉你结果在所有不匹配的代码,在什么时候,你提取KML?无论哪种方式,ogr features/geoms都有一个'ExportToJSON'方法。 –

+0

这段代码确实产生了这个结果。我只是缩短了它的可读性。无论如何感谢提示,这是KML格式。我最终做的是在http://gis.stackexchange.com/questions/7339/converting-shapefiles-to-text-ascii找到'ogr2ogr -f CSV output.csv myshape.shp -lCO GEOMETRY = AS_WKT' -files –

回答

0

我设法找到一个简单的脚本,易于使用使用GDAL:

ogr2ogr -f CSV multipolygon_states.csv cb_2015_us_state_20m.shp -nlt MULTIPOLYGON -lco GEOMETRY=AS_WKT