E城系统设计
5/24
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 数据库设计.
略.