我有一个 Pandas 数据框,其中包含一系列形状匀称的 Point 对象形式的起点和终点。我想将其转换为线串的地理数据库。ID orig_coord dest_coord0 POINT (-116.2847753565571 43.61722615312507) POINT (-116.3042144501943 43.60844476082184)1 POINT (-116.2847753565571 43.61722615312507) POINT (-116.3042144501943 43.60844476082184)2 POINT (-116.2847753565571 43.61722615312507) POINT (-116.3042144501943 43.60844476082184)我试过了df['line']=df.apply(lambda x: LineString()),但没有任何反应。我试过了df['line']=LineString([df['orig_coord'],df['dest_coord']]),但这给了我---------------------------------------------------------------------------AttributeError Traceback (most recent call last)c:\users\...\py3\lib\site-packages\shapely\speedups\_speedups.pyx in shapely.speedups._speedups.geos_linestring_from_py()AttributeError: 'list' object has no attribute '__array_interface__'During handling of the above exception, another exception occurred:AssertionError Traceback (most recent call last)<ipython-input-31-fe64089b1dcf> in <module>----> 1 df['line']=LineString([df['orig_coord'],df['dest_coord']])c:\users\...\py3\lib\site-packages\shapely\geometry\linestring.py in __init__(self, coordinates) 46 BaseGeometry.__init__(self) 47 if coordinates is not None:---> 48 self._set_coords(coordinates) 49 50 @propertyc:\users\...\py3\lib\site-packages\shapely\geometry\linestring.py in _set_coords(self, coordinates) 95 def _set_coords(self, coordinates): 96 self.empty()---> 97 ret = geos_linestring_from_py(coordinates) 98 if ret is not None: 99 self._geom, self._ndim = retc:\users\...\py3\lib\site-packages\shapely\speedups\_speedups.pyx in shapely.speedups._speedups.geos_linestring_from_py()AssertionError:
2 回答

慕码人2483693
TA贡献1860条经验 获得超9个赞
这里有一个解决方案:
from shapely.geometry import Point, LineString
o = [Point (-116.2847753565571, 43.61722615312507),
Point(-116.2847753565571, 43.61722615312507),
Point (-116.2847753565571,43.61722615312507)]
d = [Point (-116.3042144501943, 43.60844476082184),
Point(-116.3042144501943,43.60844476082184),
Point(-116.3042144501943,43.60844476082184)]
df = pd.DataFrame({'orig_coord' : o, 'dest_coord': d})
df['line']=df.apply(lambda x: LineString([x['orig_coord'], x['dest_coord']]),axis=1)
print(df['line'])

aluckdog
TA贡献1847条经验 获得超7个赞
我已经用它来获取 Point 对象,但我没有想到要重复这个过程:
df['line']=[LineString(xy) for xy in zip(df.orig_coord,df.dest_coord)]
添加回答
举报
0/150
提交
取消