我做的一个动态的地标试验插件
上传到免费空间上了,大家一起看看吧!http://pgp.bbs6.cn/GE2WEB.asp
用途:
想象中的用途有以下几个方面。
1、网络个人用户的地标位置可以被保存在服务器上,方便存储。
2、工作组一级的用户可以在完善web功能之后,实现工作组的工作平台,为相关区域进行集中标点,集中编辑内容。实现简单的工作分工合作
3、爱好群用户可以基于 web 平台实现,标记地标的共享。
当然以上种种功能有赖于 web 平台的完善。
功能:
1、插件的功能:
在 GE 使用过程中将选择好的地点数据通过 ASP 动态 web 传送到数据库中存储起来。
再使用动态更新机制,将数据库中存储的位置数据下载下来呈现给用户。
2、web 的作用:
通过简单的动态网页技术实现与 GE 通信并管理获得的数据。
(重要的功能扩展大概都会是在这里发生的。)
设计思想:
主要是为了解决网友在玩 GE 的过程中,位置数据不能通过简单的互动操作完成的共享的问题。
思路来自于 GEwar 这个基于 GE 的游戏,其中在刚开始时的选择位置的地标,明显存在互动网页处理的痕迹(黑箱操作 呵呵!)。
通过GE中用来描述地标位置数据的 KML,以及其中提供的 <NetworkLink> 标签自有的数据传输特性,来完成与 ASPweb 的通信。
下面的部分详细介绍一下代码中的关键环节。
(使用的是Javascript编写ASP,其中的语法规则与Vbscript不同)
代码讲解:
// 用来定义输出的文件格式,声明为 KML 目的是告诉系统以 GE 为处理程序。避免用户的再操作。
Response.ContentType = "application/vnd.google-earth.kml+xml";
- <NetworkLink>
- <name>网友上传的位置</name>
- <open>1</open>
- <Url>
- //传输信息的目标地址,当然也可以理解为下载数据的目标地址
- <href><%=ServerURL%>/LocationList.asp</href>
- //刷新的模式,详细的功能可以参看google的kml说明 http://earth.google.com/kml/kml_tags.html
- <refreshMode>onInterval</refreshMode>
- //刷新的时间,以秒为单位
- <refreshInterval>60</refreshInterval>
- //同样是刷新的模式,激发的事件不同
- <viewRefreshMode>onRequest</viewRefreshMode>
- </Url>
- </NetworkLink>
复制代码
在这里介绍一下内幕 呵呵。
数据的来源:
<NetworkLink>在与<href>中提供的地址通信时,以 GET 方式传输一个以 BBOX 为名称的变量过去其中的数据格式是- BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]
复制代码 以下是引用的google对<NetworkLink>的描述:- Defines a referenced KML file on a local or remote network. You can set the location of the link to the KML file using the <Url> tag. Within that tag, you can define the refresh options in order to update information based on time and camera change. You can also use the <ViewFormat> tag to return a variable to the server that contains a string containing client viewing information, such as what the current bounding box of the client is, or the current heading.
复制代码 但是经过试验,没有能够证明以上文字中的 <ViewFormat> 能够定义传输的数据的内容的这一片断。也许有待更进一步的测试。
上面需要注意的是 bounding box,估计就是指 BBOX。
上面解决了数据来源的问题,下一步就是处理得到的数据。
处理数据:- // 取得数据
- var BBOX = Request.QueryString("BBOX");
- // 取得屏幕参数 west,south,east,north
- var _ary = String(BBOX).split(",");
- var west = _ary[0];
- var south = _ary[1];
- var east = _ary[2];
- var north = _ary[3];
- // 取得窗口中心点坐标位置
- var = (Number(south)+Number(north))/2;
- var Longitude = (Number(west) +Number(east) )/2;
- var Coordinates = Longitude+ "," +Latitude;
- // 取得窗口范围
- var Latitude_width = Math.abs(Number(south)-Number(north));
- var Longitude_width = Math.abs(Number(west) -Number(east) );
- // 避免窗口范围过大
- if((Latitude_width>0.3)||(Longitude_width>0.2)){
- Server.Transfer("/err2big.kml");
- }
复制代码 以上代码中需要解释的是 (Latitude_width>0.3)||(Longitude_width>0.2)
用来限制察看的 GE 窗口范围,也就是用来判断 GE 中的窗口是不是大于一个卫星扫描图片的范围。(当然这个只是个人的感觉而已,可以设定为其它的数值范围。)
但是不能没有这一段代码,原因在于窗口的大小决定了获得的参数的准确性。在试验中发现没有这一段条件语句时,由于窗口过大则运算出的 Latitude 和 Longitude 会变成 0,也就是说 GE 中看到的位置与运算出的位置不能统一了。
进一步需要的是 web Application 的处理和操作
剩下的工作:
web Application 将要做的工作有,数据库操作与维护、位置相关信息的标注、用户验证、位置信息的分类等。
好多功能都是我不会做的。
帖子以后会再继续完善
欢迎大家共同研究,动态 KML 技术。
edit add by 14:14 2006-9-12
网友意见:垃圾处理、数量太多 怎样解决?
[ 本帖最后由 苹果皮 于 2006-9-12 02:15 PM 编辑 ] |