Зачем проверять, находится ли геопоинт на земле, потерпев неудачу в картопии? - PullRequest
0 голосов
/ 11 февраля 2019

После этого ответа я попытался проверить, соответствует ли пара координат (долгота, широта) = (-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.

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 11 февраля 2019

Эта точка находится очень близко к побережью.Вы использовали береговую линию в масштабе 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

Если вы хотите получить это право в таких масштабах, вам потребуется более точное представление береговой линии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...