底图中的is_land(python)

我一直试图用mpl_toolkits.basemap中的.is_land掩盖土地.

运行以下代码时:

map =底图(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)返回False

但是当没有指定区域时

map =底图(projection =’cyl’,resolution =’f’)

value = map.is_land(11.61168822665539,57.86868795294363)

print(value)返回True

我无法弄清楚为什么.

我确实需要指定区域,否则代码运行速度会慢5-6倍.

最佳答案 您错误地应用is_land.根据
http://matplotlib.org/basemap/api/basemap_api.html?highlight=is_land#mpl_toolkits.basemap.Basemap.is_land

如果给定的x,y点(在投影坐标中)超过陆地,则is_land返回True,否则返回False.土地的定义是基于

与类实例关联的GSHHS海岸线多边形.点

 陆地区域内的湖泊不计入陆地点.

这意味着您必须将lat-lon坐标转换为投影的x,y,然后运行is_land.像这儿:

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
点赞