地图图层
地图图层概念
Flash API可以包含一个或者多个图层,地图上不同的信息可以通过不同的图层来表达。
您可以使用Map类的addLayer方法将图层添加到地图中。如下:
var map:Map = new Map(new Size(800, 600)); map.centerAndZoom(new LngLat(116.404, 39.915), 12); var layer : Layer = new RasterLayer("BaiduMap", map, 0.5, 131072); map.addLayer(layer);
RaterLayer类是Flash API提供的一种图层类型,该图层使用百度地图的瓦片服务作为数据源。
图层的分类
Flash API将图层分为栅格图层和矢量图层。
栅格图层通过将多个瓦片块按一定的规则拼接在一起来表达地图信息,其中每一个瓦片块表示一张图块。它覆盖了地图的整个表面。RasterLayer类是Flash API对栅格图层的一种默认实现。
矢量图层通过Flash绘图API将一系列的坐标绘制到矢量图层上来表达地图信息。Flash API1.0.0版本未实现矢量图层。
自定义图层
地图坐标系
百度地图使用墨卡托投影。百度地图的坐标系涉及:经纬度球面坐标系统,墨卡托平面坐标系统,图块编号系统。
关于这三个坐标系统的详细说明请参看:百度地图坐标系统说明
图层分辨率
Flash API中有一个图层分辨率的概念。图层分辨率的单位为:米/像素,即每像素表示多少米。
在您创建一个RasterLayer对象时,构造函数里第3、4个参数说明了图层的最小和最大分辨率。如下:
var layer : Layer = new RasterLayer("BaiduMap", map, 0.5, 131072);
百度地图默认图层的显示层级有19级。第1级的分辨率为131072,第n级的分辨率为:131072 * Math.pow(2, n - 19)
如果您的应用中使用了默认图层(RasterLayer)且只想展示第10~16级的数据,则调整图层的分辨率即可。如下:
var layer : Layer = new RasterLayer("BaiduMap", map, 4, 256);
如果您的应用中使用了默认图层(RasterLayer)且添加了自定义的图层。则您需要将自定义图层的最大、最小层级所对应的最小、最大分辨率按照百度地图的分辨率规则进行转换,即转换为米/像素单位的分辨率,然后设置给自定义图层,如下:
// 添加默认图层 var layer : Layer = new RasterLayer("BaiduMap", map, 4, 256); map.addLayer(layer); // 添加自定义图层 var minResolution : Number = ... var maxResolution : Number = ... var mylayer:MyLayer = new MyLayer("MyLayer", map, minResolution , maxResolution ); map.addLayer(mylayer);
之后,会根据mylayer的最大、最小分辨率决定在哪些层级对mylayer进行渲染。
图层实现
了解了百度地图坐标系和图层分辨率的概念后,您可以继承自Layer或者RasterLayer实现您自己的图层。
需要注意的是,你的图层类(比如NewLayer必须继承自Layer)
构造函数中,需要通过super调用Layer的构造函数,如super(layerName, map, minResolution, maxResolution)
重写draw函数。在draw函数里实现您自定义图层的绘制逻辑,比如加载瓦片数据。
重写dispose函数。在dispose函数里释放您图层的资源。
重写move函数。在地图移动的过程中(比如拖拽)会调用图层的move函数,您可以在move函数里实现地图拖拽过程中的处理逻辑,比如加载空白区域的瓦片数据。
重写clone函数。在clone函数里,返回您图层的副本。
自定义图层实现请参看相关下载提供的示例Demo。