如何在python(笔记本)中使用高分辨率的卫星背景图像在Map上绘制(lat, lon, value)
数据?
Folium不提供卫星瓦片。SimpleKML和googleearthplot似乎只对巨大的低分辨率地球数据有用。EarthPy可以接受图像瓦片,但它们到NASA网站的链接只提供〉0.1 °的低分辨率图像。Cartopy是matplotlib用户的新希望,但我找不到任何卫星图像的例子。
这种挫折感特别大,因为使用R
,使用RGoogleMaps包,这项工作非常容易,例如:
plotmap(lat, lon, col=palette(value), data=mydataframe, zoom = 17, maptype="satellite")
如何在Python中做到这一点?
3条答案
按热度按时间kpbwa7wx1#
另一种选择是使用
gmplot
。它基本上是围绕Google Maps javascript API的Python Package 器,允许您生成.html
文件,在后台渲染您的Map。在这里,我使用它来绘制一个以卫星图像为背景的随机漫步(默认情况下不支持这种Map类型,但它非常简单地使其工作):
您可以在浏览器中打开生成的
.html
文件,并像与Google Maps一样进行交互。不幸的是,这意味着您不会获得漂亮的matplotlib
图形窗口或任何东西,因此为了生成图像文件,您需要自己截图或破解一些东西来为您呈现HTML。另一件要记住的事情是,你可能需要一个Google Maps API密钥,否则你最终会像我一样得到一个丑陋的暗水印Map:
另外,由于你想用颜色来描述值,你需要手工将它们转换成颜色字符串,并使用
gmap.scatter()
方法。如果你对这种方法感兴趣,请告诉我,这样我就可以尝试编写一些代码来完成这一任务。更新
下面是一个版本,它支持将值编码为卫星图像上散点图中的颜色。为了达到这个效果,我使用了
matplotlib
的色彩Map表。如果你愿意,你可以更改色彩Map表,请参阅here选项列表。我还包含了一些代码,用于从apikey.txt
文件中读取API密钥,这允许每个研究人员使用他们自己的单独密钥而不改变代码(如果没有找到这样的文件,则默认为没有API密钥)。作为示例,我使用了一系列单调递增的值,这些值在
coolwarm
颜色Map中从蓝色阴影Map到红色:hc8w905p2#
通过注册Mapbox(mapbox.com)并使用他们提供的API密钥,您可以获得folium以使用自定义平铺集(他们的
API_key=
和tile='Mapbox'
参数似乎不适合我)。例如,这对我来说是有效的(然而,公共Map的分辨率会根据位置而有所不同):
我从来没有真正使用过Mapbox,但看起来你甚至可以创建自己的Tileset,如果你碰巧有你想使用的图像。
NB:我在我的笔记本上运行了这个安装folium第一:
针对评论意见:
crcmnpdw3#
使用散景,这可能是最简单的方式,根据我使用的GMAP卫星瓦片。
您的Map选项
添加一些工具以获得交互式Map
创建Map并对其进行自定义
添加您的数据