在我们进行地图相关开发时候,避免不了要绘制比例尺。在百度,高德的地图API里都提供了比例尺控件,但是ArcGIS for Android里并没有提供。不过没关系,我们可以自己绘制一个比例尺来。
在绘制比例尺前,我们先了解几个概念:
PPI,Pixels Per Inch的所写,表示的是每英寸所拥有的像素数目;PX,像素,表示图像中的一个最小单位;DPI,Dots Per Inch,每英寸点数,即图像密度;.9.PNG,Android开发里面的一种特殊的图片,这种格式的图片通过ADT自带的编辑工具生成,使用九宫格切分的方法,使图片支持在Android环境下的自适应展示。即这种类型图片在Android里无论怎样拉伸缩小都不失真。
其中PPI和DPI在实际生活中的定义是不太一样的,而在Android里,他们的含义却是相似的。单独把DPI拿出来主要是Android里有个方法可以分别获取到屏幕X轴和Y轴的像素密度。
.9.PNG格式的图片不失真,正好适合我们做来做比例尺图片。
好了,我们好绘制一个比例尺,需要做些什么呢?
首先,我们得知道当前地图比例,这个参数可以通过MapView.getScale来获取;
其次,我们要根据当前地图比例绘制一个比例尺。绘制的方案有两种,一个是固定尺子长度,根据当前地图比例更换比例尺的比,比如1:2000,1:3000等;另一种是固定一些比例单位,比如1:50000后就是1:20000,然后比例尺的长度根据实际长度会做一定伸缩。这里我采用第二种,因为第一种根据实际比例往往比例尺的比值不是整数,并且在较大比例时候显示位数较长,四舍五入又会失去精度。
最后,是监听地图放大缩小事件,并作出响应改变比例尺。
方法就是这么简单,那就实际开动吧。
第一步,实例化地图,加载图层:
mMapView=(MapView)findViewById(R.id.mapview);
mMapScaleView=(MapScaleView)findViewById(R.id.scaleView);
String path= StorageUtil.getSDCardRootPath(getApplicationContext());
ArcGISLocalTiledLayer layer=new ArcGISLocalTiledLayer(path);
mMapView.addLayer(layer,0);
mMapScaleView.setMapView(mMapView);
ArcGISRuntime.setClientId(System.clint);//设置许可
mMapView.setMapBackground(0xFAFAFA, 0xffffff, 0.0f, 0.0f);//地图背景
第二步,自定义View,绘制比例尺:
初始化自定义View:
public MapScaleView(Context context) {
this(context, null);
this.context=context;
this.initVariables();
}
public MapScaleView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
this.context=context;
this.initVariables();
}
public MapScaleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.co