在本地机器上使用轻量级CGI服务器,通过Python等为Google Earth提供KML?

2 投票
2 回答
1073 浏览
提问于 2025-04-15 16:54

你好,

我想写一个脚本,处理来自Google Earth的简单HTTP请求,并返回KML文件,以显示存储在本地的地图瓦片。我想用Python来做,但其他语言也可以。我之前没有接触过CGI,但我觉得这是完成我任务的最简单方法。Google KML文档中提到的就是使用Python CGI脚本与Google Earth进行交互。有没有可以下载的CGI服务器(可以在Windows 7上运行,或者如果绝对必要,我可以搭建一个运行Linux的虚拟机),我只需要把我的Python脚本放上去就能用的?

简单来说,当我在Google Earth的屏幕上移动时,它会向我的服务器发送请求,服务器会告诉Google Earth在屏幕上显示什么内容。很简单。

背景: 我在开车的时候,笔记本电脑放在旁边,连接了一个USB GPS接收器,实时更新我在Google Earth上的位置。但是,由于我处于离线状态,我无法动态下载Google Maps的地图瓦片,这样就看不到街道名称等信息。我已经下载了地图瓦片,并把它们拼接成一个大的PNG图像,覆盖我将要行驶的城市,然后将这些图像作为叠加层导入到Google Earth中。但我希望能建立一个本地运行的服务器,连接到存储在电脑上的地图瓦片数据库,提供KML文件,以便显示这些瓦片作为叠加层,而不需要每次出行前都提前做好这些工作。

2 个回答

1

如果我是你,我会使用 MapServerTilecache 来实现这个功能(也就是通过http提供带地理信息的图像,支持python的地图脚本绑定)。

如果你想用简单的cgi,可以考虑使用lighthttpd、nxginx或者类似的服务器。

另外,要注意,抓取谷歌地图的图块很可能会违反他们的使用条款。

1

标准库中的CGIHTTPServer

# current directory containing cgi-bin directory with scripts in
# subclass CGIHTTPRequestHandler and override cgi_directories to change this
#
os.chdir('/path/to/htdocs')

BaseHTTPServer.HTTPServer(('',80), CGIHTTPServer.CGIHTTPRequestHandler).serve_forever()

这个服务器速度不快,而且功能有限(比如你只能返回 200 OK 这样的响应),而且可能也不是特别安全。不过,对于这种本地使用的情况来说,它还是可以的。

撰写回答