Google Earth与Python CGI交互例子

看了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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值