添加地图控件,在布局文件中是这样写的
<com.esri.android.map.MapView
android:layout_width="match_parent"
android:layout_weight="4"
android:layout_height="0dp"
android:id="@+id/mapview">
</com.esri.android.map.MapView>
主要是前面的com.esri.android.map.MapView,添加的是一个MapView控件,
接着在java代码中新建一个MapView,还是通过fingViewById的方法建立连接,
MapView map;
map = (MapView)findViewById(R.id.mapview);
然后添加一个图层,ArcGISTiledMapServiceLayer,
有好几种图层,具体的不同见以下网址:
https://developers.arcgis.com/javascript/3/jsapi/arcgisdynamicmapservicelayer-amd.html
用addLayer方法添加图层,当然,可以添加很多个图层
String strMapUrl = "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer";
map.addLayer(new ArcGISTiledMapServiceLayer(strMapUrl));
或者两个合一起写也行。这个地图是中文的。
英文的url:"http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"
然后是缩放至当前位置,首先需要get当前位置的经纬度
无论是使用GPS还是Network都是可以的,获得了Location之后获取经纬度:
longitude = loc.getLongitude();
latitude = loc.getLatitude();
接着新建Point,传入经纬度参数,再将该Point转换成你添加的地图的投影坐标系上的点
Point wgspoint = new Point(longi, lati);
Point mapPoint = (Point) GeometryEngine.project(wgspoint, SpatialReference.create(4326), map.getSpatialReference());
上段代码第二行,用project方法转换点时第一个参数是待转换的点,第二个参数是输入的投影坐标,第三个参数是输出投影坐标
4326是GCS_WGS_1984 的wkid,具体的各个wkid可以看这个网址(http://www.cnblogs.com/liweis/p/5951032.html),下面有个附表,有大部分的投影坐标系的wkid
用下面的代码缩放至当前位置一定范围的地图:
Unit mapUnit = map.getSpatialReference().getUnit();
double zoomWidth = Unit.convertUnits(3,
Unit.create(LinearUnit.Code.MILE_US),
mapUnit);
Envelope zoomExtent = new Envelope(mapPoint, zoomWidth, zoomWidth);
map.setExtent(zoomExtent);
如果不需要随时变动的话以上代码就可以结束了,但是现实中人拿着手机可能是不断运动的,,特别是开着车子跑的
这就需要地图随定位不断切换了
我们可以将上面缩放的那段代码放到定位中,位置变换的时候执行它
like this:
map.setOnStatusChangedListener(new OnStatusChangedListener() {
private static final long serialVersionUID = 1L;
public void onStatusChanged(Object source, STATUS status) {
if (source == map && status == STATUS.INITIALIZED) {
LocationDisplayManager locationManager=map.getLocationDisplayManager();
locationManager.setAutoPanMode(AutoPanMode.OFF);
locationManager.setLocationListener(new LocationListener() {
boolean locationChanged = false;
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
public void onLocationChanged(Location loc) {
if (!locationChanged) {
locationChanged = true;
double lati = loc.getLatitude();
double longi = loc.getLongitude();
longitude = loc.getLongitude();
latitude = loc.getLatitude();
Point wgspoint = new Point(longi, lati);
Point mapPoint = (Point) GeometryEngine
.project(wgspoint,
SpatialReference.create(4326),
map.getSpatialReference());
Unit mapUnit = map.getSpatialReference()
.getUnit();
double zoomWidth = Unit.convertUnits(
SEARCH_RADIUS,
Unit.create(LinearUnit.Code.MILE_US),
mapUnit);
Envelope zoomExtent = new Envelope(mapPoint,
zoomWidth/3, zoomWidth/3);
map.setExtent(zoomExtent);
}
}
});
locationManager.start();
}
}
});
就酱