2017-04-08 64 views
4

我一直在試圖掩蓋與.is_landmpl_toolkits.basemap土地。is_land在底圖(python)

當運行下面的代碼:

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)返回假

但是當不指定區域

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

value = map.is_land(11.61168822665539, 57.86868795294363)

print(value)返回真

我不能找出原因。

我確實需要指定區域,否則代碼運行速度會慢5-6倍。

回答

1

您錯誤地應用了is_land。根據http://matplotlib.org/basemap/api/basemap_api.html?highlight=is_land#mpl_toolkits.basemap.Basemap.is_land is_land如果給定的x,y點(在投影座標中)在陸地上,則返回True,否則返回False。土地的定義基於與類實例關聯的GSHHS海岸線多邊形。陸上區域內的湖泊點數不計爲陸地點。

這意味着您必須將經緯度座標轉換爲投影的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 
+0

With'projection ='cyl'',它是Plate Carree的投影。所以,你可以在'map.is_land()'中使用緯度,以度爲單位。換句話說,在這種情況下不需要'xpt,ypt = map(lon,lat)'。 – swatchai