在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进行了检查。我还检查了x
和y
是否应切换sgeom.Point(x, y)
中的位置,但是由于结果仍然是False
,因此无法解决问题。
有人可以帮忙吗?
答案 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()
如果您想在这样的规模上做到这一点,那么您将需要使用更准确的海岸线表示方式。