基于AJAX技术的WebGis系统实践 (2. 三维城市地图系统设计)

1.1   一些基本概念.

(1)    标注(Corp): 代表地图中唯一一点(X,Y), 每个标注唯一对应一个ID.

(2)    地图服务器(Map Server): 完成有关地图操作的基本功能, 为其他信息系统提供应用接口, 保留基本数据. 比如实体信息等.

(3)    实体(Unit): 标识建筑地理位置的范围(Top_X, Top_Y, Foot_X, Foot_Y), 一个实体可以包含若干个标注, 某个标注属于一个实体的充要条件是.

 Corp(X,Y) Unit(Top_X, Top_Y, Foot_X, Foot_Y). 每个实体唯一对应一个UnitID.

标注属于实体.

 

1.2   坐标系.

坐标以 ” 1” 象素为单位, 第一张图片 pre_map_1_1 的左上角坐标为 原点坐标. 图片规格为 200*200.

四个级别一共需要确定四个坐标系, 相邻级别坐标比例为2, 进行坐标计算和转换时, 只需按照如下公式转换成绝对坐标(最大级别坐标)即可.

X=power(2, (4-level)*X;

Y=power(2,(4-level))*Y;

1.3   地图显示与定位.

1. 地图定位功能是实现 拖动地图, 鹰眼, 查看标记 等基本功能的基础.

这里我们采用中心点定位方法.

决定地图定位的因数一共4,描述如下:

(1). 显示地图窗口左上点坐标: Left(X,Y ).

(2). 显示地图窗口右下点坐标: Right(X,Y).

(3). 显示地图级别: Level. 1-4.

(4). 当前地图窗口中心坐标: Client(X,Y) .

我们编写了一个算法, 算法接收以上参数后返回要在客户端展示的图片数组. 客户端将按照这些图片的属性排列, 从而实现了地图的显示功能.

算法详见: Map.ShowMap.GetMaps.

 

2. 通过UnitID定位地图, 通过URL接收参数UnitID, 从数据库中取出该标记所对应的坐标信息, 设置当前窗口中心坐标Client(X,Y)为该标记的坐标, 即可实现参数定位. 有了UnitID, 可以实现用户的个性化设置,比如 涂鸦, 便签等. 还可根据需求展示动态信息.

3. 比例尺:

地图尺寸和城市实际距离的比值. 这里我们一共用了四种, 没个显示级别对应一个比例尺. 记为Map_I_Scale.I为显示级别, I {1,2,3,4}

: 测距将会使用比例尺.

1.4   地图缩放.

地图能够显示4个级别, 相邻级别的比例为1:2, 所以缩放地图时, 只需将当前中心点坐标按比例乘除, 改变level, 重载地图即可.

操作地图缩放方式参考 http://maps.google.com/.

1.5   鹰眼.

鹰眼为用户提供操作地图的方便, 快速浏览整个地图, 提供了比地图窗口更大的视角范围.

1. 鹰眼组成: 鹰眼由外框和内框组成, 外框确定鹰眼图片的显示范围, 内框为地图实际显示区域. 如下图所示.

2. 鹰眼比例: 地图大小和鹰眼内框的比值 记为:Eye_Map.

      3. 鹰眼图片: 鹰眼图片为二维平面图, 比例尺记为. Eye_I_Scale.

     其中Eye_I_Scale= Map_I_Scale/Eye_Map.

4 .拖动定位: 外框固定不动, 只能拖动内框, 但不能超出外框范围. 内框默认处于外框的中心位置, 包含以下几个动作.

(1). 拖动内框, 释放鼠标后,计算出内框的偏离坐标, 再和鹰眼比例相乘, 将地图当前中心坐标加上所得到的结果, 重载地图.

   鹰眼内框偏离坐标为(OffsetX,OffsetY). 则得到计算后的地图中心位置坐标为.

   Client(X+OffsetX*Eye_Map, Y+OffsetY*Eye_Map).

(2). 鹰眼中的图片坐标加上内框偏离坐标得到新的鹰眼中心坐标值, 重载鹰眼.

(3). 将内框在外框中居中.

1.6    实体.

1.      实体显示.

为了提高系统效率, 每次重载地图, 都一次性取出当前地图窗口中所有

   包含的实体信息(UnitID,Name,Top_X, Top_Y, Foot_X, Foot_Y), 以数组结构缓存于客户端, 当鼠标在地图上滑动时, 查找该数组,如果该点属于某一个实体,系统提示该实体名称, 当鼠标点击该实体时, 弹出一个对话框, 对话框中展示该实体中包含的标注信息.

  

2.       实体维护.

由于实体是不经常改变的信息, 所以实体信息的维护由管理员完成, E城用户涉及不到此方面.

(1). 实体列表:  在一个地图上, 用若干半透明矩形显示视野范围内的所有实体位置.

(2). 添加实体: 添加实体需要录入最基本的实体信息, UnitID, Name, Top_X, Top_Y, Foot_X, Foot_Y. Grade. 保存实体信息的表为Unit., 添加一个实体后, 将立刻发布到实体列表中.

(3). 修改实体信息: 在实体列表中, 选中一个实体, 就会在另外一个页面中显示该实体对应的基本信息, 提交修改即可.

(4). 删除实体: 删除一个实体时, 要判断该实体中是否已经存在标注. 若存在企业标注信息, 则提示必须先删除该实体所包含的所有标注.

(5). 修改实体位置: 在实体列表中, 选中某个实体, 选择工具栏拖动选项, 即可改变实体位置.

(6). 修改实体范围: 在实体列表中, 选中某个实体, 选择工具栏修改范围选项, 即可改变实体范围.

1.7    标注.

通过Ecity, 用户可以提交企业标注信息, 标注信息要通过管理员审核后才能在地图上展示, 未审核的标注信息保存在表 CorpMarkReg, 管理员审核后,将转移到Corp表中, 提交标注, 系统自动匹配该标注所属的实体.

(1). 申请标注:

通过Ecity的标注申请页面, 用户可以提交标注, 该标注首先进入CorpMarkReg表中, 等待管理员审核, 未审核的标注不会在地图中显示.

   申请成功后, 系统返回一个 访问该标注的 URL, 当该标注被审核后URL才会生效.

   (2). 审核标注:

       审核标注要求提供给管理员一个查看显示待审核的界面, 提供个性化操作, 比如修改标注位置, 标注信息等. 审核操作描述如下:

     1). CorpMarkReg表中的申请信息导入Corp, 并且自动匹配标注所属的实体(通过坐标范围查询), 一个标注只可能属于一个实体.

     2). 导入Corp表的信息缺省为 已审核”.

   (3). 审核通知:

       审核后系统将自动发送Email通知用户该标注已经被审核, 并提供查看该标注的URL.

1.8   操作流程.

(1). 申请标注.

第一步: 进入标注申请界面, 提交标注信息. 获取URL.

第二步: 等待审核.

      (2). 标注审核.

       第一步: 进入标注管理, 查看标注信息.

       第二步: 规范/修改标注信息.

       第三步: 审核标注.

       第四步: 发送Email审核通知.

(3). 实体管理.

    .

(4). 标注编辑.

    .

 

 

 

 

 

 

 

1.9   数据库设计.

       略.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值