我在一个GeoPandas数据框中有一列字符串,格式如下:'{type=Point, coordinates=[37.55, 55.71]}'
或者 '{type=MultiPoint, coordinates=[[37.6, 55.4]]}'
。它也可以是多边形或其他任何几何形状。然后还有一些以嵌套列表的形式表示的点。我该如何将其转换为普通的GeoPandas几何对象呢?
shapely.geometry.shape
将GeoJSON字符串转换为Shapely几何体。from shapely.geometry import shape
df['geometry'] = df.apply(lambda: row: shape(row['jsoncolumn']), axis=1)
从这个源代码:在Github上
我编写了以下函数:
import geopandas as gpd
import geojson
import json
def geojsonification(x):
geom = x['geom']
if type(geom) == dict:
s = json.dumps(geom)
s2 = geojson.loads(s)
res = shape(s2)
return res
else:
return np.nan
你可以这样使用:
gdf.geometry = gdf.apply(geojsonification, axis=1)
# Add necessary shapes and keys
coordinates = 'coordinates'
type = 'type'
Point = 'Point'
MultiPoint = 'MultiPoint'
Polygon = 'Polygon'
MultiPolygon = 'MultiPolygon'
center='center'
df['geometry'] = df.geoData.apply(lambda x: shape(eval(x.replace('=',':'))))
AttributeError: 'str' object has no attribute 'get'
,调试器指向行geom_type = ob.get("type").lower()
。 - James Flashshape
之前使用json.loads
,或者手动重新生成几何图形。也许有人会知道更好的方法。 - martinfleis