我想在我的python代码中包含开放式街道地图(OSM)。
我已经阅读了很多有关OSM的网页。但是不幸的是,我对哪种包装最满意感到迷茫。
我正在寻找一种在我的应用中获取OSM映像的简便方法。当我开始时,我想到的是:
import matplotlib.pyplot as plt
# Pseudo - Code for required function 'GetOSMImage'
Map = GetOSMImage(lat,long,delta_lat,delta_long)
imgplot = plt.imshow(Map)
稍后,我想在此plt中添加绘图我的其他数据。(我知道我需要处理预测等)
我不需要/想要的:
你对我有一个很好的起点吗?还是我低估了这个主题的复杂性?
根据您的输入,我能够实现目标。这是我给其他人的代码,它们正在寻找OSM的起点。(当然,还有很多改进的余地)。
更新资料
请遵守开放街道地图的使用政策!
OpenStreetMap数据可供所有人免费使用。 我们的磁贴服务器不是。
要求
- 未经操作工作组的事先许可,禁止大量使用(例如,分发使用openstreetmap.org中的图块的应用程序)。请参阅下面的替代方法。
- 清楚显示许可证归属。
- 不要主动或被动地鼓励侵犯版权。
- 只能直接通过最终用户操作来触发对/ cgi-bin / export的调用。(例如:“单击此处进行导出”。)导出调用是运行时非常昂贵的(CPU
- RAM)函数,在服务器处于高负载时会经常拒绝。
- 推荐:请勿在tile.openstreetmap.org上对任何URL进行硬编码,因为这样做会限制您在服务中断或阻止时快速做出反应的能力。
* 推荐:添加一个指向https://www.openstreetmap.org/fixthemap的链接,以允许您的用户报告并解决我们数据中的问题。
技术使用要求
有关更多详细信息,请参见:https :
//operations.osmfoundation.org/policies/tiles/
这是代码:
import matplotlib.pyplot as plt
import numpy as np
import math
import urllib2
import StringIO
from PIL import Image
def deg2num(lat_deg, lon_deg, zoom):
lat_rad = math.radians(lat_deg)
n = 2.0 ** zoom
xtile = int((lon_deg + 180.0) / 360.0 * n)
ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n)
return (xtile, ytile)
def num2deg(xtile, ytile, zoom):
n = 2.0 ** zoom
lon_deg = xtile / n * 360.0 - 180.0
lat_rad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
lat_deg = math.degrees(lat_rad)
return (lat_deg, lon_deg)
def getImageCluster(lat_deg, lon_deg, delta_lat, delta_long, zoom):
smurl = r"http://a.tile.openstreetmap.org/{0}/{1}/{2}.png"
xmin, ymax =deg2num(lat_deg, lon_deg, zoom)
xmax, ymin =deg2num(lat_deg + delta_lat, lon_deg + delta_long, zoom)
Cluster = Image.new('RGB',((xmax-xmin+1)*256-1,(ymax-ymin+1)*256-1) )
for xtile in range(xmin, xmax+1):
for ytile in range(ymin, ymax+1):
try:
imgurl=smurl.format(zoom, xtile, ytile)
print("Opening: " + imgurl)
imgstr = urllib2.urlopen(imgurl).read()
tile = Image.open(StringIO.StringIO(imgstr))
Cluster.paste(tile, box=((xtile-xmin)*256 , (ytile-ymin)*255))
except:
print("Couldn't download image")
tile = None
return Cluster
if __name__ == '__main__':
a = getImageCluster(38.5, -77.04, 0.02, 0.05, 13)
fig = plt.figure()
fig.patch.set_facecolor('white')
plt.imshow(np.asarray(a))
plt.show()
本文向大家介绍轻松理解Python 中的 descriptor,包括了轻松理解Python 中的 descriptor的使用技巧和注意事项,需要的朋友参考一下 定义 通常,一个 descriptor 是具有“绑定行为”的对象属性。所绑定行为可通过 descriptor 协议被自定义的 __get__() , __set__() 和 __delete__() 方法重写。如果一个对象的上述三个方法任意
问题内容: 我是python的新手(我使用python 3),并且我尝试使用JSon中的一个字符串和两个列表作为成员序列化一个类。我发现python标准中有一个json库,但似乎我需要手动实现序列化方法。是否有一个JSon编码器,我可以在其中简单地传递一个对象,并以字符串形式接收序列化的对象,而无需实现序列化方法。例: 谢谢。 问题答案: 不了解任何预构建的内容,但是如果您的对象足够简单,则可以编
轻松上传是魔方加密开发的快速上传组件。轻松上传的环境要求: Microsoft Windows 操作系统 Google Chrome 浏览器 使用步骤 安装轻松上传后,您可以通过以下步骤使用: 打开 Windows 资源管理器,选择需要上传的 PHP 文件 按下 CTRL+C 复制文件 打开魔方加密页面 按下 CTRL+V 粘贴文件 等待文件上传 安装方法 点击这里 打开 Chrome 网上应用店
第一节 Go语言安装与测试 轻松友好的安装方式,多平台支持。 第二节 内置基础数据类型 认识Go提供的清晰的数据类型,很清晰,不骗你。 第三节 变量与常量定义 学语言绕不开的变量,当然Go是静态语言,变量都是有固定类型的,程序运行过程中无法改变变量类型。 第四节 控制流程 很简单,只有if,for,switch三种流程,连while都没有。 第五节 数组,切片和字典 内置高级数据类型。如果我们需要
Go轻松学是一款学习GoLang的小型学习App。基于Android平台。主要包含Go基础和Go实例两部分。 Go轻松学,可以让你随时随地浏览Go提供的独特功能,本应用提供了翔实的测试例程序,100%测试通过。并且可以根据反馈持续更新。在这里,变量,函数,结构体,指针,并行计算,包和测试都有详细的讲解。 Go基础部分由本人的读书笔记归纳整理而来,而实例部分则由网址http://gobyexampl
本文向大家介绍如何在VSCode上轻松舒适的配置Python的方法步骤,包括了如何在VSCode上轻松舒适的配置Python的方法步骤的使用技巧和注意事项,需要的朋友参考一下 前言 之前被学长推荐使用了VSCode,后惊叹了VSCode的强大,尤其是他的配置,比之前使用sublime方便多了,刚好实验室也来了一批新的学弟学妹,来仔细的逐步的讲解一些,在自己的电脑上轻松的配置VSCode并完成美化等