Расстояние между точкой и объектом MultiPolygon Geoseries в Python - PullRequest
0 голосов
/ 15 марта 2019

Я хочу рассчитать расстояние до точки от объекта геосерии Multiploygon, созданного с помощью функции cascaded_union в GeoPandas.Ниже приведен мой код:

import numpy as np
import pandas as pd
import geopandas as gpd
from shapely.ops import cascaded_union
from matplotlib import pyplot as plt
from shapely.geometry import LineString, Point, MultiPoint

fp = "\\TM_WORLD_BORDERS-0.3\\TM_WORLD_BORDERS-0.3.shp"
data = gpd.read_file(fp)

mycountries = ['Canada','Russia']

req_data = data[data.NAME.isin(mycountries)]
req_data = req_data.reset_index()
req_data = req_data.drop('index',axis=1)

polygons = [req_data['geometry'][0],req_data['geometry'][1]]
boundary = gpd.GeoSeries(cascaded_union(polygons))
boundary.plot(color = 'black')
plt.show()

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

Я пытался использовать функцию расстояния, но результат, который я получаю, неверен.Более того, если я рассматриваю точку где-нибудь в Индийском океане, она дает результат как 0, что опять-таки не то, что мне нужно.

Файл формы можно загрузить из файла TM_WORLD_BORDERS-0.3.zip в http://thematicmapping.org/downloads/world_borders.php

1 Ответ

0 голосов
/ 17 марта 2019

здесь одно решение с использованием Point.distance:

from shapely.geometry import Point
point = Point(34.23, 86.44)
dist={}
for index, row in req_data.iterrows():
    if row.geometry.geom_type == 'MultiPolygon':
        for  r in row.geometry:
            print(row.NAME,'  dist', point.distance(r))
            if row.NAME in dist:
                l = dist[row.NAME];l.append(point.distance(r))
                dist[row.NAME] = l
            else:
                dist[row.NAME] = [point.distance(r)]
    else: #Polygon
        print(row.NAME,'  dist', point.distance(row.geometry))
        dist[row.NAME] = [point.distance(row.geometry)]


for x in dist:
    print(x, min(dist[x]))

вывод: минимальное расстояние от каждой страны

 Canada 95.0619464401356
 Russia 12.118509615115519
...