android arcgis开发

这篇博客介绍了如何在Android应用中使用ArcGIS SDK进行地图开发,包括配置ArcGIS Tools,添加MapView,创建图层,标注显示,以及实现点击标注弹出气泡的功能。此外,还涉及到坐标系转换和清除地图点的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A.ArcGIS Android 10.2.7 API地址:https://developers.arcgis.com/android/api-reference/reference/packages.html

B.ArcGIS for Android地图控件的5大常见操作:http://blog.youkuaiyun.com/arcgis_mobile/article/details/7801467


1.在MyEclipse中配置SDK后,在MyEclipse安装目录MyEclipse10\dripins目录下新建arcgis文件夹,放入解压后的jar包,重启MyEclipse即可发现项目右键出现ArcGIS Tools选项。

2.layout中加入

 <com.esri.android.map.MapView

    android:id="@+id/mMap"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

</com.esri.android.map.MapView>

3.Activity中

 mMapView = (MapView) findViewById(R.id.mMap);

 ArcGISTiledMapServiceLayer tileLayer = new ArcGISTiledMapServiceLayer(mapUrl);

 mMapView.addLayer(tileLayer);  //添加图层到地图窗口中

 ArcGISRuntime.setClientId("1eFHW78avlnRUPHm");  //去除地图水印

 gLayer = new GraphicsLayer();

 mMapView.addLayer(gLayer);

4.在地图上标注显示

public void pointMap(List<Map<String,Object>> carList){

if(gLayer.getGraphicIDs()!=null){

gLayer.removeGraphics(gLayer.getGraphicsIDs()); //清楚地图上的点

}

for(Map<String,Object> map : carList){

if("0".equals(map.get("State").toString())){

double longtitude = Double.parseDouble(map.get("Longitude").toString); //维度同理

Point mPoint = new Point(longtitude,lantitude);

Drawable drawable = getResources().getDrawable(R.drawable.normal);

         graphic = new Graphic(mPoint,new PictureMarkerSymbol(drawable));

int graphicId = gLayer.addGraphic(graphic);

gLayer.updateGraphic(graphicId,graphic);

}

popCallout();  //callout是点击标注弹出气泡

}

}


public void popCallout(){

mMapView.setOnSingleTapListener(new OnSingleTapListener(){

public void onSingleTap(float x,float y){

Graphic result = getGraphicsFromLayer(x,y,gLayer); //检索当前光标点(手指按压位置)的附近的graphic对象

if(result != null){

   callout = mMapView.getCallout();

callout.setStyle(R.xml.calloutstyle);

View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.callout_car,null);

callout.setMaxHeight(400);

callout.setMaxWidth(500);

callout.setContent(view);

callout.setCoordinates(mMapView,toMapPoint(new Point(x,y));  //显示位置

callout.show();

}

}

})

}


public Graphic getGraphicsFromLayer(double xScreen,double yScreen,GraphicsLayer gLayer){

Graphic result = null;

try{

int[] idsArr = gLayer.getGraphicsIDs();

double x = xScreen; double y = yScreen;

for(int i=0; i< idsArr.length;i++){

Graphic graphic = gLayer.getGraphic(idsArr[i]);

if(graphic !=null){

Point point = (Point)graphic.getGeometry();

point = mMapView.toScreenPoint(point);

double x1 = point.getX(); double y1 = point.getY();

if(Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1))<25){

result = graphic;

break;

}

}

}

}

}

 

4326经纬度坐标系,3857也就是102100另外一个坐标系

 获取地图的坐标系:int wkId = mMapView.getSpatialReference().getID();

mPoint = (Point)GeometryEngine.projecct(mPoint,SpatialReference.create(4326),mMapView.getSpatialReference());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值