检查点是否在边界内

问题描述 投票:0回答:1

我有一份描述西班牙边界的点清单。我希望能够判断一对经纬度是否在这些边界内。我尝试过以下方法:

import shapefile
import matplotlib.pyplot as plt
from shapely.geometry import MultiPoint, Point, Polygon
from shapely.geometry.polygon import Polygon
sf = shapefile.Reader(r"\ESP_adm0.shp")
shapes = sf.shapes()
lat = []; lon = []
for i in range(len(shapes[0].points)):
    lon.append(shapes[0].points[i][0]);lat.append(shapes[0].points[i][1])

我知道我正在检索点,因为我能够绘制并获得所需的结果:

plt.plot(lon,lat,'.', ms=0.1)

(下面链接中的情节) plot result

我执行以下操作将点放入多边形中:

    coords = list(zip(lat,lon))
    spain_pol = Polygon(coords)

然后我使用 contains 函数,总是得到 false。

    spain_pol.contains(Point(0,42))
    spain_pol.contains(Point(42,0))

这些都返回 false。事实上,我一直无法得到一个点,我试图返回 True。

我尝试过各种各样的事情,我想我一定错过了一些基本的东西。也许西班牙有岛屿并且有多个多边形这一事实就是问题所在?我迷路了。欢迎任何帮助。

python gis shapefile fiona
1个回答
2
投票

以防万一其他人也遇到同样的问题。以下代码完美运行:

import fiona
from shapely.geometry import MultiPoint, Point, Polygon,shape
from shapely.geometry.polygon import Polygon

multipol = fiona.open(r"C:\Users\Jordi\Downloads\ESP_adm_shp\ESP_adm0.shp")
multi = next(iter(multipol))

point = Point(0,42)
point.within(shape(multi['geometry']))

这会返回一个非常受欢迎的“True”:)

© www.soinside.com 2019 - 2024. All rights reserved.