Однорядные Точки на Линестринг - PullRequest
1 голос
/ 08 марта 2019

У меня есть датафрейм pandas с серией источников и пунктов назначения в форме фигурных объектов Point.Я хотел бы преобразовать его в базу геоданных строк.

ID    orig_coord                                      dest_coord
0     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     @property

c:\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 = ret

c:\users\...\py3\lib\site-packages\shapely\speedups\_speedups.pyx in shapely.speedups._speedups.geos_linestring_from_py()

AssertionError: 

Ответы [ 2 ]

2 голосов
/ 09 марта 2019

вот одно решение:

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'])
2 голосов
/ 08 марта 2019

Я уже использовал это, чтобы получить объекты Point, но мне не пришло в голову повторить процесс:

df['line']=[LineString(xy) for xy in zip(df.orig_coord,df.dest_coord)]

...