我一直试图用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