检查点是否在边界内
Check if point is inside boundaries
我有一个描述西班牙边界的点列表。我想知道一对经纬度是否在这些边界内。我尝试了以下方法:
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)
(情节在下面的link)
plot result
我执行以下操作以将点放入多边形中:
coords = list(zip(lat,lon))
spain_pol = Polygon(coords)
然后我使用包含函数,总是得到 false。
spain_pol.contains(Point(0,42))
spain_pol.contains(Point(42,0))
这些都 return 错误。事实上,我一直无法得到一个点,我已经尝试 return 一个 True。
我已经尝试了各种方法,我想我一定是遗漏了一些基本的东西。也许西班牙有岛屿并且有不止一个多边形的事实是问题所在?我迷路了。欢迎任何帮助。
以防其他人遇到同样的问题。以下代码完美运行:
import shapefile
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']))
这个returns非常受欢迎"True":)
我有一个描述西班牙边界的点列表。我想知道一对经纬度是否在这些边界内。我尝试了以下方法:
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)
(情节在下面的link) plot result
我执行以下操作以将点放入多边形中:
coords = list(zip(lat,lon))
spain_pol = Polygon(coords)
然后我使用包含函数,总是得到 false。
spain_pol.contains(Point(0,42))
spain_pol.contains(Point(42,0))
这些都 return 错误。事实上,我一直无法得到一个点,我已经尝试 return 一个 True。
我已经尝试了各种方法,我想我一定是遗漏了一些基本的东西。也许西班牙有岛屿并且有不止一个多边形的事实是问题所在?我迷路了。欢迎任何帮助。
以防其他人遇到同样的问题。以下代码完美运行:
import shapefile
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']))
这个returns非常受欢迎"True":)