我有一个Excel工作表,其中的一列以geojson格式保存多多边形或多边形的坐标为文本(字符串),例如:
{"type":"MultiPolygon","coordinates":[[[[-53.66244258911961,-29.75558936798518],[-53.66447927551047,-29.75479744502596],[-53.66497701215211,-29.75466967800058],[-53.66539668737831,-29.75517848699731],[-53.66526854910706,-29.75591361056259],[-53.6650635542948,-29.75612467174048],[-53.66486858286636,-29.75644981903961],[-53.66515127770877,-29.7567909579031],[-53.66564072778738,-29.75715257050725],[-53.66631831510097,-29.756760797715],[-53.66578289093859,-29.75598035821501],[-53.66541811733386,-29.75603526880071],[-53.66529349652963,-29.75593510161232],[-53.66541328395244,-29.75517097017889],[-53.66671211596781,-29.75478047547476],[-53.66745257013564,-29.75488704546076],[-53.6675639628448,-29.75500945384272],[-53.66746725317702,-29.75519780225035],[-53.66759379828195,-29.75570701689554],[-53.66769689961644,-29.75583061630008],[-53.66785408698414,-29.75582761347013],[-53.66801872670045,-29.75593573710897],[-53.66830156112037,-29.75632351955843],[-53.66845877777294,-29.75639540596585],[-53.66937831773524,-29.75797111875023],[-53.66873635482919,-29.75818647714824],[-53.66872702211081,-29.75904729569487],[-53.66718029195727,-29.7594060497663],[-53.666981289892,-29.75860798657777],[-53.66558159318289,-29.75794062686812],[-53.66427767673421,-29.7567105113694],[-53.66244258911961,-29.75558936798518]]]]}
我想遍历包含多边形作为文本的行,并使用python将其转换为正确的geojson文件。我可以对具有一个以上特征的多边形执行此操作,但是对于仅具有一个特征的多边形则会收到错误消息。
我的脚本:
for i,j,k in zip(account_names,field_ids,geojsons):
g = [x.buffer(0) for x in shape(json.loads(k)).buffer(0).geoms]
print i
[x.buffer(0) for x in shape(json.loads(k)).buffer(0).geoms]
print ("multipolygon")
# Now convert it to a shapefile with OGR
driver = ogr.GetDriverByName('geojson')
ds = driver.CreateDataSource('George_Vellidis_2.geojson')
layer = ds.CreateLayer('', None, ogr.wkbPolygon)
# Add one attribute
layer.CreateField(ogr.FieldDefn('id', ogr.OFTInteger))
defn = layer.GetLayerDefn()
#loop thru the polygons
for i in range(len(g)):
# Create a new feature (attribute and geometry)
feat = ogr.Feature(defn)
feat.SetField('id', i+1)
# Make a geometry, from Shapely object
geom = ogr.CreateGeometryFromWkb(g[i].wkb)
feat.SetGeometry(geom)
layer.CreateFeature(feat)
ds = layer = feat = geom = None
其中,i,j和k是分别保存帐户名称,字段ID和geojson作为文本的列表。我需要帐户名称和字段ID只是为了知道如何命名输出文件。 k是一个包含文本的列表,例如我上面提到的文本。我所有的多边形都是"type":"MultiPolygon"
,即使其中一些仅包含一个多边形也是如此。当我运行此脚本时,包含多个要素的多边形没有问题。但是,当一个多边形仅包含一个要素时,我得到:
WKTReadingError Traceback (most recent call last)
<ipython-input-15-e617adc70e95> in <module>()
1 import shapely.wkt
2
----> 3 P = shapely.wkt.loads(k)
4 print(P)
C:\Users\Ran\Anaconda2\lib\site-packages\shapely\wkt.pyc in loads(data)
8 def loads(data):
9 """Load a geometry from a WKT string."""
---> 10 return geos.WKTReader(geos.lgeos).read(data)
11
12 def load(fp):
C:\Users\Ran\Anaconda2\lib\site-packages\shapely\geos.pyc in read(self, text)
252 if not geom:
253 raise WKTReadingError(
--> 254 "Could not create geometry because of errors "
255 "while reading input.")
256 # avoid circular import dependency
WKTReadingError: Could not create geometry because of errors while reading input.
什么导致无法读取具有一个特征的多边形?