Google Earth与Python CGI交互例子
2007-12-14 15:43
411 查看
看了Servlet-based Google Earth Tours感觉挺好,不过他这个不够简单,我来仿照KML官方网站的python例子,写个简单的小例子把文章的精髓拿出来.
快速体验:
1. 把下面的getest.kml和getest.py保存到本机。
2.把getest.py的第一行改成你的python解释器路径,并放到Apache的cgi-bin下。
3. 双击getest.kml会启动google earth,在Place面板里会出现Python Demo目录,选中它,当你移动屏幕的时候,你会发现屏幕中心一直会有一个placemark,这个placemark是python程序动态返回的。
原理介绍:
1. 先看看KML的<NetworkLink>标签的样子,比如getest.kml
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Folder>
<name>Python Demo</name>
<visibility>0</visibility>
<open>0</open>
<description>Liu Test</description>
<NetworkLink>
<name>Random Placemark</name>
<visibility>0</visibility>
<open>0</open>
<description>my discription</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://localhost/cgi-bin/getest.py</href>
<refreshInterval>2</refreshInterval>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
</Link>
</NetworkLink>
</Folder>
</kml>
这里主要有两个地方:
一个是 <href>http://localhost/cgi-bin/getest.py</href> ,GE向这个URL要数据,并把BBOX以GET方式发送到该URL,比如http://localhost/cgi-bin/getest.py?bbox=121,36,122,37
另一个是<refreshInterval>2</refreshInterval>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
这几个标签指定了GE发送数据的时间间隔和其他设定。
当我们在GE中打开这个KML文件的时候,GE就回向 http://localhost/cgi-bin/getest.py 要数据,我们就可以在getest.py中对该请求进行处理,并返回结果(KML)。
2. 第二步就是编写getest.py处理这个响应,最简单的是返回一个位于屏幕中心的地标,代码如下:
#!C:/Python24/python.exe
#replace the line above with our own python path
import cgi
url = cgi.FieldStorage()
bbox = url['BBOX'].value
bbox = bbox.split(',')
west = float(bbox[0])
south = float(bbox[1])
east = float(bbox[2])
north = float(bbox[3])
center_lng = ((east - west) / 2) + west
center_lat = ((north - south) / 2) + south
kml = (
'<?xml version="1.0" encoding="UTF-8"?> '
'<kml xmlns="http://earth.google.com/kml/2.2"> '
'<Placemark> '
'<name>View-centered placemark</name> '
'<Point> '
'<coordinates>%.6f,%.6f</coordinates> '
'</Point> '
'</Placemark> '
'</kml>'
) %(center_lng, center_lat)
print 'Content-Type: application/vnd.google-earth.kml+xml '
print kml
我们也可以在getest.py中编写复杂的功能,比如从数据库中提取数据生成KML文件,然后返回客户端与GE的数据叠加。原理介绍,简单至上,就这么简单吧。
学习资料(摘自http://www.javaworld.com/javaworld/jw-11-2005/jw-1114-google.html):
Resources
Download the source code that accompanies this article “Servlet-based Google Earth Tours”
http://www.javaworld.com/javaworld/jw-11-2005/google/jw-1114-google.zip
Cylindrical projection
http://mathworld.wolfram.com/CylindricalProjection.html
Google Earth API
http://code.google.com/apis.html#earth
Google Earth Community
http://bbs.keyhole.com/ubb/ubbthreads.php/Cat/0
Google Earth download
http://earth.google.com/download-earth.html
Google Earth homepage
http://earth.google.com/
Hibernate framework
http://www.hibernate.org/
iBATIS framework
http://ibatis.apache.org/index.html
Jamon framework
http://www.jamon.org/Features.html
Microsoft Virtual Earth
http://virtualearth.msn.com/
Nasa World Wind
http://worldwind.arc.nasa.gov/
Google Earth KML Tutorial, where you'll find the algorithm for centering
http://www.keyhole.com/kml/kml_tut.html#tracking_point
For more articles on servlets, browse the Servlets section of JavaWorld's Topical Index
http://www.javaworld.com/channel_content/jw-servlets-index.shtml
For more articles on how to put your Java skills to work, browse the Applied Java section of JavaWorld's Topical Index
http://www.javaworld.com/channel_content/jw-applied-index.shtml
快速体验:
1. 把下面的getest.kml和getest.py保存到本机。
2.把getest.py的第一行改成你的python解释器路径,并放到Apache的cgi-bin下。
3. 双击getest.kml会启动google earth,在Place面板里会出现Python Demo目录,选中它,当你移动屏幕的时候,你会发现屏幕中心一直会有一个placemark,这个placemark是python程序动态返回的。
原理介绍:
1. 先看看KML的<NetworkLink>标签的样子,比如getest.kml
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Folder>
<name>Python Demo</name>
<visibility>0</visibility>
<open>0</open>
<description>Liu Test</description>
<NetworkLink>
<name>Random Placemark</name>
<visibility>0</visibility>
<open>0</open>
<description>my discription</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://localhost/cgi-bin/getest.py</href>
<refreshInterval>2</refreshInterval>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
</Link>
</NetworkLink>
</Folder>
</kml>
这里主要有两个地方:
一个是 <href>http://localhost/cgi-bin/getest.py</href> ,GE向这个URL要数据,并把BBOX以GET方式发送到该URL,比如http://localhost/cgi-bin/getest.py?bbox=121,36,122,37
另一个是<refreshInterval>2</refreshInterval>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
这几个标签指定了GE发送数据的时间间隔和其他设定。
当我们在GE中打开这个KML文件的时候,GE就回向 http://localhost/cgi-bin/getest.py 要数据,我们就可以在getest.py中对该请求进行处理,并返回结果(KML)。
2. 第二步就是编写getest.py处理这个响应,最简单的是返回一个位于屏幕中心的地标,代码如下:
#!C:/Python24/python.exe
#replace the line above with our own python path
import cgi
url = cgi.FieldStorage()
bbox = url['BBOX'].value
bbox = bbox.split(',')
west = float(bbox[0])
south = float(bbox[1])
east = float(bbox[2])
north = float(bbox[3])
center_lng = ((east - west) / 2) + west
center_lat = ((north - south) / 2) + south
kml = (
'<?xml version="1.0" encoding="UTF-8"?> '
'<kml xmlns="http://earth.google.com/kml/2.2"> '
'<Placemark> '
'<name>View-centered placemark</name> '
'<Point> '
'<coordinates>%.6f,%.6f</coordinates> '
'</Point> '
'</Placemark> '
'</kml>'
) %(center_lng, center_lat)
print 'Content-Type: application/vnd.google-earth.kml+xml '
print kml
我们也可以在getest.py中编写复杂的功能,比如从数据库中提取数据生成KML文件,然后返回客户端与GE的数据叠加。原理介绍,简单至上,就这么简单吧。
学习资料(摘自http://www.javaworld.com/javaworld/jw-11-2005/jw-1114-google.html):
Resources
Download the source code that accompanies this article “Servlet-based Google Earth Tours”
http://www.javaworld.com/javaworld/jw-11-2005/google/jw-1114-google.zip
Cylindrical projection
http://mathworld.wolfram.com/CylindricalProjection.html
Google Earth API
http://code.google.com/apis.html#earth
Google Earth Community
http://bbs.keyhole.com/ubb/ubbthreads.php/Cat/0
Google Earth download
http://earth.google.com/download-earth.html
Google Earth homepage
http://earth.google.com/
Hibernate framework
http://www.hibernate.org/
iBATIS framework
http://ibatis.apache.org/index.html
Jamon framework
http://www.jamon.org/Features.html
Microsoft Virtual Earth
http://virtualearth.msn.com/
Nasa World Wind
http://worldwind.arc.nasa.gov/
Google Earth KML Tutorial, where you'll find the algorithm for centering
http://www.keyhole.com/kml/kml_tut.html#tracking_point
For more articles on servlets, browse the Servlets section of JavaWorld's Topical Index
http://www.javaworld.com/channel_content/jw-servlets-index.shtml
For more articles on how to put your Java skills to work, browse the Applied Java section of JavaWorld's Topical Index
http://www.javaworld.com/channel_content/jw-applied-index.shtml
相关文章推荐
- windows python自带CGIHTTPServer服务器与htm进行CGIl交互
- redis python交互和实际例子
- 基于Python的CGIHTTPServer简单的交互实现
- python web编程--CGI模块简单交互。。。
- Python的CGIHTTPServer交互实现详解
- python pexpect 启动、与子进程交互的例子--logstash
- Python 数据结构(List)与文件的交互(pickle)
- Python socket分发消息例子
- Google Earth与ArcGIS数据交互
- Linux环境下python调用C静态库的方法与例子
- python socket分发消息例子(续)
- Python Qt GUI快速编程-第五章的例子Numbers的python3+pytq5+Qt Designer实现
- [Python]Python 使用 for 循环的小例子
- 举例讲解Python程序与系统shell交互的方式
- Python 继承例子
- RFC Java交互例子
- python交互模式下退格键乱码问题
- Python创建、删除桌面、启动组快捷方式的例子分享
- 在python中实现生产者和消费者的例子(四):使用thread模块和全局变量
- Python和C++交互