Ошибка преобразования списка координат многоугольника в многоугольник в Python - PullRequest
0 голосов
/ 08 ноября 2019

Ошибка: обратная трассировка (последний вызов был последним): файл «shapely \ speedups_speedups.pyx», строка 234, в shapely.speedups._speedups.geos_linearring_from_py AttributeError: у объекта «list» нет атрибута «array_interface»

Я пытаюсь создать фрейм данных, который вычисляет, попадают ли координаты широты / долготы в заданный многоугольник, используя Shapely. Я читаю выходные данные SQL из двух отдельных файлов CSV в два фрейма данных, а затем объединяю фреймы данных по location_id.

После преобразования строки координат многоугольника в список в новом столбце "координаты", яя получаю сообщение об ошибке в строке 26 моего кода при преобразовании списка в многоугольник с использованием df3['poly'] = df3.apply(lambda row: Polygon(row.coords), axis=1).

Вот пример моего CSV с данными широты / длинного ордера:

orderdata

Вот пример с координатной строкой многоугольника:

sampledata

Вот вывод моего фрейма данных после слияния и преобразования строки координат в список и до попытки создания столбца многоугольника:

dataframe2

А вот полный код:

import pandas as pd
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon

#import sql lat/long order csv and define dtypes and headers
headers = ['latitude', 'longitude', 'location_id']
dtypes  = {'latitude': 'float', 'longitude': 'float', 'location_id': 'str'}
df = pd.read_csv('C:\\Hotels_Data_Testing_SQL2.csv', header=0, names=headers, dtype=dtypes)

#import sql location polygon coordinates csv and define dtypes and headers
headers = ['location_id', 'coordinates']
dtypes =  {'location_id': 'str', 'coordinates': 'str'}
df2 = pd.read_csv('C:\\location_coordinates2.csv', header=0, names=headers, dtype=dtypes)

#create list from string of coordinates
#df2['coords'] = [list(map(float,i.split(';'))) for i in df2.coordinates]
df2['coords'] = [list(i.split(';')) for i in df2.coordinates]

#join both dataframes
df3 = df.merge(df2, left_on='location_id', right_on='location_id')
print(df3)

#create geometry column in df
#poly = [(0, 0), (0, 1), (1, 1), (1, 0)]
df3['points'] = df3.apply(lambda row: Point(row.longitude, row.latitude), axis=1)
df3['poly'] = df3.apply(lambda row: Polygon(row.coords), axis=1)
df3['withinpoly'] = df3.apply(lambda row: row.poly.intersects(row.points), axis=1)
print(df3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...