arcgis android开发之添加地图控件并缩放至当前位置

来源:互联网 发布:新业汽修软件注册码 编辑:程序博客网 时间:2024/06/06 00:40

添加地图控件,在布局文件中是这样写的

<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();    }   }  });

就酱





阅读全文
0 0
原创粉丝点击