为什么要检查陆地上的Geopoint是否无法通过Cartopy?

时间:2019-02-11 12:22:27

标签: cartopy

this answer之后,我尝试检查坐标对(经度,纬度)是否=(-3.4066095486248327,51.38747051763357)代表陆地上的位置。这是我的代码:

import fiona
import cartopy.io.shapereader as shpreader
import shapely.geometry as sgeom
from shapely.prepared import prep
geoms = fiona.open(shpreader.natural_earth(resolution='10m', category='physical', name='land'))
land_geom = sgeom.MultiPolygon([sgeom.shape(geom['geometry']) for geom in geoms])
land = prep(land_geom)

x = -3.4066095486248327
y = 51.38747051763357

print(land.contains(sgeom.Point(x, y)))

即使该点在陆地上,结果还是False,我使用Google Maps进行了检查。我还检查了xy是否应切换sgeom.Point(x, y)中的位置,但是由于结果仍然是False,因此无法解决问题。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

那一点非常靠近海岸。您已经使用了1:10百万比例的海岸线作为海岸线真实的“真相”,但是在这个比例上,该点确实不在陆地上,而只是在海岸上:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs


x = -3.4066095486248327
y = 51.38747051763357

ax = plt.axes(projection=ccrs.PlateCarree())
ax.coastlines(resolution="10m")
ax.scatter([x], [y], transform=ccrs.PlateCarree())
# Land is top half, sea is bottom half of the domain
ax.set_extent([x-.1, x+.1, y-.1, y+.1], crs=ccrs.PlateCarree())
plt.show()

point plotted with coastline

如果您想在这样的规模上做到这一点,那么您将需要使用更准确的海岸线表示方式。