我正在尝试构建一个GeoJSON 对象。我的输入是一个包含地址列、纬度列和经度列的 csv。然后我从坐标中创建了 Shapely 点,按给定的半径将它们缓冲出来,并通过映射选项获取坐标字典 - 到目前为止,一切都很好。然后,在参考了这个问题之后,我编写了以下函数来获取一系列字典:
def make_geojson(row):
return {'geometry':row['geom'], 'properties':{'address':row['address']}}
我就这样应用了它:
data['new_output'] = data.apply(make_geojson, axis=1)
我的结果专栏充满了这些:<built-in method values of dict object at 0x10...
最奇怪的部分是,当我直接调用该函数时(make_geojson(data.loc[0])
实际上,我确实得到了我期望的字典。也许更奇怪的是,当我调用从应用程序(例如data.output[0]()
,data.loc[0]['output']()
)获得的函数时,我得到了相当于以下列表:
[data.loc[0]['geom'], {'address':data.loc[0]['address']}]
,即我要获取的字典的值(但不是键)。
对于那些在家玩的人,这里有一个玩具示例:
from shapely.geometry import Point, mapping
import pandas as pd
def make_geojson(row):
return {'geometry':row['geom'], 'properties':{'address':row['address']}}
data = pd.DataFrame([{'address':'BS', 'lat':34.017, 'lon':-117.959}, {'address':'BS2', 'lat':33.989, 'lon':-118.291}])
data['point'] = map(Point, zip(data['lon'], data['lat']))
data['buffer'] = data['point'].apply(lambda x: x.buffer(.1))
data['geom'] = data.buffer.apply(mapping)
data['output'] = data.apply(make_geojson, axis=1)