返回列表 回复 发帖

KML互动初体验!

我做的一个动态的地标试验插件
        上传到免费空间上了,大家一起看看吧!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";
  1.         <NetworkLink>
  2.                 <name>网友上传的位置</name>
  3.                 <open>1</open>
  4.                 <Url>
  5.                        //传输信息的目标地址,当然也可以理解为下载数据的目标地址
  6.                        <href><%=ServerURL%>/LocationList.asp</href>
  7.                        //刷新的模式,详细的功能可以参看google的kml说明 http://earth.google.com/kml/kml_tags.html
  8.                        <refreshMode>onInterval</refreshMode>
  9.                        //刷新的时间,以秒为单位
  10.                        <refreshInterval>60</refreshInterval>
  11.                        //同样是刷新的模式,激发的事件不同
  12.                        <viewRefreshMode>onRequest</viewRefreshMode>
  13.                 </Url>
  14.         </NetworkLink>
复制代码



在这里介绍一下内幕 呵呵。
数据的来源:
         <NetworkLink>在与<href>中提供的地址通信时,以 GET 方式传输一个以 BBOX 为名称的变量过去其中的数据格式是
  1.         BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]
复制代码
以下是引用的google对<NetworkLink>的描述:
  1.         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


上面解决了数据来源的问题,下一步就是处理得到的数据。
处理数据:
  1.         // 取得数据
  2.         var BBOX = Request.QueryString("BBOX");
  3.         // 取得屏幕参数 west,south,east,north
  4.         var _ary = String(BBOX).split(",");
  5.                 var west  = _ary[0];
  6.                 var south = _ary[1];
  7.                 var east   = _ary[2];
  8.                 var north = _ary[3];
  9.         // 取得窗口中心点坐标位置
  10.         var        = (Number(south)+Number(north))/2;
  11.         var Longitude     = (Number(west) +Number(east) )/2;
  12.         var Coordinates  = Longitude+ "," +Latitude;
  13.         // 取得窗口范围
  14.         var Latitude_width    = Math.abs(Number(south)-Number(north));
  15.         var Longitude_width = Math.abs(Number(west) -Number(east) );
  16.         // 避免窗口范围过大
  17.         if((Latitude_width>0.3)||(Longitude_width>0.2)){
  18.                 Server.Transfer("/err2big.kml");
  19.         }
复制代码
以上代码中需要解释的是 (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 编辑 ]

选位功能

1.jpg

选中位置时的提示

2.jpg

网友们提供的位置

3.JPG

GE2WEB_beta.rar (33.92 KB)

阅读权限: 20

源代码

不错,顶一个!
期待GE和WEB互通的那一天!

郑重鸣谢

网友 花老鼠(30875774)
提供的解决方法解决了 中文问题
一直以来困扰本人的问题原来是 UTF-8编码问题

在此郑重地 感谢网友的热情帮助
还是比较支持这个的,挺好玩!~
赶紧注册ID来支持一下,怎么查看保存到web的数据?

回复 #5 老朋友 的帖子

下发的部分也做好了
可以看到上传的位置信息了
还没有仔细看,下来研究,呵呵
呵呵,欢迎远航同志17
1、修改了插件的编码统一为UTF-8
2、修正了插件不可以放置在站点子目录的问题
3、新加的标注在上面
http://www.dnxh.cn/ge/ge2web.asp

[ 本帖最后由 花老鼠 于 2006-9-12 11:40 AM 编辑 ]

人家还有更高级的方法

来自 godeyes.cn 的 "卧美吻花"
帖子名是 ""【授人以渔】怎样制作GEv4自动隐藏的地标?"
http://www.godeyes.cn/bbs/Announ ... mp;ID=72556&E=0

很好的方法这样的话,就不必在服务器端使用算法来解决窗口的问题了。
受用啊!
返回列表