2017-04-08 1 views
4

J'ai essayé de masquer la terre avec .is_land de mpl_toolkits.basemap.is_land dans le fond de carte (python)

Lorsque vous exécutez le code suivant:

map = Basemap(llcrnrlon = 7.298914095230308, llcrnrlat = 58.98235690451632, urcrnrlon = 12.27072348324015, urcrnrlat = 57.92306182768044,projection='cyl', resolution='f')

value = map.is_land(11.61168822665539, 57.86868795294363)

print(value) Faux retourne

mais quand ne pas spécifier une région

map = Basemap(projection='cyl', resolution='f')

value = map.is_land(11.61168822665539, 57.86868795294363)

print(value) retourne Vrai

Ce que je ne peux pas comprendre pourquoi.

J'ai vraiment besoin de spécifier la région, sinon le code sera 5-6 fois plus lent à fonctionner.

Répondre

1

Vous appliquez incorrectement is_land. Selon http://matplotlib.org/basemap/api/basemap_api.html?highlight=is_land#mpl_toolkits.basemap.Basemap.is_land is_land renvoie Vrai si le point x, y donné (dans les coordonnées de projection) est au-dessus de la terre, Faux dans le cas contraire. La définition du terrain est basée sur les polygones côtiers GSHHS associés à l'instance de classe. Les points sur les lacs à l'intérieur des régions terrestres ne sont pas comptés comme des points terrestres. Cela signifie que vous devez convertir votre coordonnée lat-lon en x, y de projection, puis exécutez is_land. Comme ici:

map = Basemap(llcrnrlon = 7.298914095230308, llcrnrlat = 58.98235690451632, 
       urcrnrlon = 12.27072348324015, urcrnrlat = 
       57.92306182768044,projection='cyl', resolution='f') 

lon, lat = 11.61168822665539, 57.86868795294363) # test coords 
xpt, ypt = map(lon, lat) # convert to projection map 
value = map.is_land(xpt, ypt) # test is_land 
+0

Avec 'projection = 'cyl'', c'est la projection de Plate Carree. Donc, vous pouvez utiliser lat, long en degrés dans 'map.is_land()'. En d'autres termes, 'xpt, ypt = map (lon, lat)' n'est pas nécessaire dans ce cas. – swatchai