Что лучше всего увидеть, если точка (широта и долгота) лежит в пределах многоугольника для фрейма данных pyspark со столбцами широты и долготы? - PullRequest
0 голосов
/ 26 октября 2018

Как лучше всего смотреть, если точка (широта и долгота) лежит в пределах многоугольника?У меня есть pyspark dataframe со столбцами - id, широта, долгота.

df_event = sc.parallelize([
['a',33.765557,-84.369011],
['b',33.765526, -84.368416],
['c',33.766233, -84.364824]
]).toDF(('id', 'latitude','longitude'))

Ниже многоугольник

v0 = [33.765499, -84.368708]   
v1 = [33.765489, -84.368043]  
v2 = [33.764821, -84.368053]  
v3 = [33.764816, -84.368729]  
lats_vect = np.array([v0[0],v1[0],v2[0],v3[0]])  
lons_vect = np.array([v0[1],v1[1],v2[1],v3[1]])  
lons_lats_vect = np.column_stack((lons_vect, lats_vect))  
polygon = Polygon(lons_lats_vect)

Есть ли способ использовать его увидеть широту, долготуФрейм данных pyspark находится внутри этого многоугольника.Могу ли я использовать для этого стройные?У меня есть функция ниже, но она выдает ошибку ImportError: Нет модуля с именем shapely.geometry.point

def isInBoundingBox(x,y,Polygon):
    try:
    x = float(x); y = float(y); OK = 1
    except ValueError:
        OK = 0
    if OK == 1:
        point = Point(float(x), float(y));
    return Polygon.contains(point)

Я могу преобразовать фрейм данных pyspark в фрейм данных pandas с помощью приведенного ниже кода, и это будет работать очень медленнодля огромного набора данных.Я хотел бы придерживаться фрейма данных pyspark и не преобразовывать его в панд.

df_events_pandas = df_event.toPandas()
df_events_pandas["geometry"] = df_events_pandas.apply(lambda row: 
Point(row["_longitude"], row["_latitude"]), axis=1)
df_events_pandas["polygon"] = polygon
df_events_pandas["inPolygon"] = df_events_pandas.apply(lambda row: 
(row["geometry"].within(row["polygon"])), axis = 1) 
...