zoukankan      html  css  js  c++  java
  • SuperMap实现2.5维地图的热区功能

      E都市、都市圈所谓的3维地图,其实是伪3维的,因为我们只能看到1个建筑物的3个面,且不能旋转,准确来说连2.5维都算不上,这里权且称做2.5维。当然出现这种局面也是受技术所限,要是3维的地图跑在互联网上,那对网速的客户端的机器要求都是很高的。当然,2.5的地图也为我们提供了2维地图不能比的便捷。

      E都市中鼠标在建筑物上移过时的高亮区域,即热区功能,如何用超图的技术实现,讲述下我的步骤和方法。

      1、制作2.5维图片。使用SuperMap object的“地图缓存”功能,将需要制作图片的区域出图,图片大小可定为4000*4000,以此图片作为底图,建模并渲染成图片。

      2、在SuperMap object中将渲染好的图片导入成影像数据集。

      3、用配准功能对导入的影像数据集进行配准,配准后,影像数据集即有了坐标信息,初始的影像只是图片信息,即长和宽。

      4、将配准后的影像数据集加入地图,再新建一个面数据集Region01,并加入地图。

      5、在地图中编辑面图层Region01@china,绘制建筑物的轮廓,并在面数据集中记录建筑物的名称、位置等自然信息。

      6、在地图中将Region01@china设为不可见,并保存地图,这样地图文件就制作完成了。

      7、现在就开始写代码了,使用SuperMap IS .NET的Ajaxscript技术实现。

      8、当地图加载到一定的比例时,使用map.GetQueryManager().QueryByRect()方法查询当前地图窗口范围内的Region01@china数据,记得设置queryParam.returnShape = true;

      9、循环返回的记录,创建SuperMap.IS.Geometry()的实例objGeo,读取面对象的shape属性添加到objGeo的points中,使用map.CustomLayer.InsertGeometry()方法将objGeo插入几何对象。注意,些几何对象是透明样式的面对象,要用到InsertGeometry()方法的OnClick事件,onMouseOver事件,onMouseOut事件。

      10、OnClick事件自己写了,主要是弹出建筑物的信息窗口。

      11、onMouseOver事件,var objGeo = map.CustomLayer.GetGeometry(e.ids[0]);取得插入的几何对象,并根据objGeo坐标信息使用map.CustomLayer.InsertPolygon()方法插入一个面对象,此面对象的样式为有边线且填充色半透明。

      12、onMouseOut事件,使用map.CustomLayer.RemovePolygon()方法移除上步骤中插入的面对象。在上步骤中插入的面对象id不变,即地图中的面对象不会超过1个。

      这12个步骤即完成了2.5维地图的热区功能,只要样式设的恰当,图片做的精美,完全可以和商业地图相媲美。

      还有1个问题没有解决,即45度斜视角的问题,E都市3维地图的正北方指向了屏幕的右上角,这样实现45度斜视角,但是如果在SuperMap object中将地图旋转45度的话,整个地图的GPS坐标就会发生变化,还请高手指教。

      此实现方法如有问题,欢迎拍砖。有建议,请留言,吾当虚心请教。

      欢迎转载,请注明出处http://www.cnblogs.com/brawei

  • 相关阅读:
    ARM-Linux S5PV210 UART驱动(1)----用户手册中的硬件知识
    可变参数列表---以dbg()为例
    《C和指针》 读书笔记 -- 第7章 函数
    《Visual C++ 程序设计》读书笔记 ----第8章 指针和引用
    支持异步通知的globalfifo平台设备驱动程序及其测试代码
    linux内核中sys_poll()的简化分析
    《C和指针》读书笔记——第五章 操作符和表达式
    测试方法-等价类划分法
    MonkyTalk学习-8-Agent
    MonkyTalk学习-7-Verify-Verify
  • 原文地址:https://www.cnblogs.com/brawei/p/2279656.html
Copyright © 2011-2022 走看看