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

posted on 2011-12-08 14:37  白亚伟  阅读(3827)  评论(5编辑  收藏  举报

导航