Извлечь название полигона, если гео-точка находится внутри полигона? - PullRequest
0 голосов
/ 12 апреля 2020

Извлечь имя многоугольника, если географическая точка находится внутри многоугольника? У меня есть два набора данных, один с именем и полигоном полигона, а другой с именем местоположения, широтой и долготой.

Данные 1 (Geo pandas Dataframe)

COMMUNITY NAME   POLYGON
New York         MULTIPOLYGON (((55.1993358199345 25.20971347951325, 
                 55.19385836251354 25.20134197109752.... 25.20971347951325)))
Chennai          MULTIPOLYGON (((65.1993358199345 22.20871347951325, 
                 55.19325836251354 15.20132197109752 .... 15.20971347951325)))        

Данные 2 (Data Frame)

STOP NAME            LONGITUDE       LANGITUDE
Chennai main stop    55.307228       25.248844
Cabra stop           55.278824       25.205862
USA stop NY          55.069368       24.973946

Если данные 2 (stop_name) находятся внутри данных 1 (polygon), необходимо извлечь имя полигона. ie. если USA Stop NY присутствует в любом «Нью-Йорке», необходимо добавить имя в новый столбец в data2.

Пример кода:

from shapely.geometry import Point, Polygon
# Create Point objects
p1 = Point(55.230830, 25.128038)
p2 = Point(24.976567, 60.1612500)
# Create a Polygon
coords = [(55.199335819934504,25.209713479513255),(55.193858362513538,25.20134197109752),(55.187450889885667,25.195407028080979 )]
poly = Polygon(coords)
p1.within(poly)

Обновление 1

Данные 1 (KML преобразован в Json, Json преобразован в Dataframe)

 import geopandas as gpd
data_poly = gpd.read_file(path + "Data_community_file.geojson")

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Вот ответ на поставленный выше вопрос.

Install these two packages to avoid the "Error"

    #!pip install rtree
    #conda install -c conda-forge libspatialindex 

Polygon Data (GeoDataFrame)
data_poly = gpd.read_file("data.geojson")
# Readonly the required columns 
# Drop NAN

Location Data (GeoDataFrame)
bus = pd.read_Csv(busstop.csv)

#convert dataframe to geodatframe
gdf = geopandas.GeoDataFrame(
    bus, geometry=geopandas.points_from_xy(bus.stop_location_longitiude, bus.stop_location_latitiude))

#Output
joined_gdf = gpd.sjoin(gdf, data_poly, op='within')
0 голосов
/ 13 апреля 2020

Я нашел интересную статью, описывающую, как извлечь геопункт из многоугольника.
http://archived.mhermans.net/geojson-shapely-geocoding.html

 import json
    from shapely.geometry import shape, Point
    # depending on your version, use: from shapely.geometry import shape, Point

    # load GeoJSON file containing sectors
    with open('sectors.json') as f:
        js = json.load(f)

    # construct point based on lon/lat returned by geocoder
    point = Point(-122.7924463, 45.4519896)

    # check each polygon to see if it contains the point
for feature in js['features']:
    polygon = shape(feature['geometry'])
    if polygon.contains(point):
        print(feature)

Он может извлечь совпадающий многоугольник из гео json. Проблема: если мы используем точку из фрейма данных, ее ошибка выброса

AttributeError: 'Series' object has no attribute '_geom'
...