1 package com.example.arcgis; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.esri.android.map.GraphicsLayer; 7 import com.esri.android.map.MapOnTouchListener; 8 import com.esri.android.map.MapView; 9 import com.esri.android.map.ags.ArcGISDynamicMapServiceLayer; 10 import com.esri.android.map.ags.ArcGISTiledMapServiceLayer; 11 import com.esri.android.runtime.ArcGISRuntime; 12 import com.esri.core.geometry.Envelope; 13 import com.esri.core.geometry.Geometry; 14 import com.esri.core.geometry.GeometryEngine; 15 import com.esri.core.geometry.Line; 16 import com.esri.core.geometry.LinearUnit; 17 import com.esri.core.geometry.Point; 18 import com.esri.core.geometry.Polygon; 19 import com.esri.core.geometry.Polyline; 20 import com.esri.core.geometry.SpatialReference; 21 import com.esri.core.geometry.Unit; 22 import com.esri.core.map.FeatureSet; 23 import com.esri.core.map.Graphic; 24 import com.esri.core.symbol.PictureMarkerSymbol; 25 import com.esri.core.symbol.SimpleFillSymbol; 26 import com.esri.core.symbol.SimpleLineSymbol; 27 import com.esri.core.symbol.SimpleMarkerSymbol; 28 import com.esri.core.symbol.SimpleMarkerSymbol.STYLE; 29 import com.esri.core.tasks.SpatialRelationship; 30 import com.esri.core.tasks.ags.find.FindParameters; 31 import com.esri.core.tasks.ags.find.FindResult; 32 import com.esri.core.tasks.ags.find.FindTask; 33 import com.esri.core.tasks.ags.query.Query; 34 import com.esri.core.tasks.ags.query.QueryTask; 35 import com.esri.core.tasks.identify.IdentifyParameters; 36 import com.esri.core.tasks.identify.IdentifyResult; 37 import com.esri.core.tasks.identify.IdentifyTask; 38 import android.os.AsyncTask; 39 import android.os.Bundle; 40 import android.app.Activity; 41 import android.content.Context; 42 import android.graphics.Color; 43 import android.util.DisplayMetrics; 44 import android.view.MotionEvent; 45 import android.view.View; 46 import android.view.View.OnClickListener; 47 import android.widget.Button; 48 import android.widget.Toast; 49 50 public class ArcGisHandleActivity extends Activity { 51 private MapView mapview; 52 private Button zoomin; 53 private Button zoomout; 54 private Button addlayer1; 55 private Button addlayer2; 56 private Button drawpoint; 57 private Button drawline; 58 private Button drawpolygon; 59 private Button clean; 60 private Button cleanlayer; 61 private Button calc; 62 private Button search; 63 private Button search2; 64 private Button search3; 65 private Button search4; 66 private Button btn_line; 67 private Button btn_rectangle; 68 private Button btn_polygonal; 69 70 private GraphicsLayer drawLayer; 71 private MapTouchListener mapTouchListener; 72 73 private SimpleLineSymbol lineSymbol; 74 private PictureMarkerSymbol picSymbol; 75 private SimpleMarkerSymbol markerSymbol; 76 private SimpleFillSymbol fillSymbol; 77 private SimpleFillSymbol fillSymbol2; 78 private SimpleFillSymbol fillSymbol3; 79 private SimpleFillSymbol fillSymbol4; 80 private Geometry geometry = null; 81 82 @Override 83 protected void onCreate(Bundle savedInstanceState) { 84 super.onCreate(savedInstanceState); 85 setContentView(R.layout.activity_main); 86 findById(); 87 getMap(); 88 89 } 90 91 public void findById() { 92 mapview = (MapView) findViewById(R.id.map); 93 zoomin = (Button) findViewById(R.id.zoomin); 94 zoomout = (Button) findViewById(R.id.zoomout); 95 addlayer1 = (Button) findViewById(R.id.addlayer1); 96 addlayer2 = (Button) findViewById(R.id.addlayer2); 97 drawpoint = (Button) findViewById(R.id.drawpoint); 98 drawline = (Button) findViewById(R.id.drawline); 99 drawpolygon = (Button) findViewById(R.id.drawpolygon); 100 clean = (Button) findViewById(R.id.clean); 101 cleanlayer = (Button) findViewById(R.id.cleanlayer); 102 calc = (Button) findViewById(R.id.calc); 103 search = (Button) findViewById(R.id.search); 104 search2 = (Button) findViewById(R.id.search2); 105 search3 = (Button) findViewById(R.id.search3); 106 search4 = (Button) findViewById(R.id.search4); 107 btn_line = (Button) findViewById(R.id.btn_line); 108 btn_rectangle = (Button) findViewById(R.id.btn_rectangle); 109 btn_polygonal = (Button) findViewById(R.id.btn_polygonal); 110 // 本地图片symbol 111 picSymbol = new PictureMarkerSymbol(getResources().getDrawable( 112 R.drawable.point)); 113 // 标记symbol 114 markerSymbol = new SimpleMarkerSymbol(Color.RED, 10, STYLE.CIRCLE); 115 ; 116 // 线条symbol 117 lineSymbol = new SimpleLineSymbol( 118 getResources().getColor(R.color.blue), 2); 119 // 填充物symbol 120 fillSymbol = new SimpleFillSymbol(getResources().getColor( 121 R.color.orange)); 122 fillSymbol2 = new SimpleFillSymbol(getResources().getColor( 123 R.color.half_blue)); 124 fillSymbol3 = new SimpleFillSymbol(getResources().getColor( 125 R.color.yellow)); 126 fillSymbol4 = new SimpleFillSymbol(getResources().getColor(R.color.red)); 127 128 zoomin.setOnClickListener(new Onclick()); 129 zoomout.setOnClickListener(new Onclick()); 130 addlayer1.setOnClickListener(new Onclick()); 131 addlayer2.setOnClickListener(new Onclick()); 132 drawpoint.setOnClickListener(new Onclick()); 133 drawline.setOnClickListener(new Onclick()); 134 drawpolygon.setOnClickListener(new Onclick()); 135 clean.setOnClickListener(new Onclick()); 136 cleanlayer.setOnClickListener(new Onclick()); 137 calc.setOnClickListener(new Onclick()); 138 search.setOnClickListener(new Onclick()); 139 search2.setOnClickListener(new Onclick()); 140 search3.setOnClickListener(new Onclick()); 141 search4.setOnClickListener(new Onclick()); 142 btn_line.setOnClickListener(new Onclick()); 143 btn_rectangle.setOnClickListener(new Onclick()); 144 btn_polygonal.setOnClickListener(new Onclick()); 145 } 146 147 public void getMap() { 148 // 设置clientId 去除水印 149 ArcGISRuntime.setClientId("UoFIN8IWetDb7YWr"); 150 // Tile静态地图 151 ArcGISTiledMapServiceLayer tileLayer = new ArcGISTiledMapServiceLayer( 152 "http://10.50.50.6/ArcGIS/rest/services/GTJ_JCDT/MapServer"); 153 // 基础地图index设置为最底层 index=0 154 mapview.addLayer(tileLayer, 0); 155 // 加载花图层 156 drawLayer = new GraphicsLayer(); 157 mapview.addLayer(drawLayer, 1); 158 mapTouchListener = new MapTouchListener(ArcGisHandleActivity.this, 159 mapview); 160 mapview.setOnTouchListener(mapTouchListener); 161 162 } 163 164 class MapTouchListener extends MapOnTouchListener { 165 private Geometry.Type geoType = null;// 用于判定当前选择的几何图形类型 166 private Point ptStart = null;// 起点 167 private Point ptPrevious = null;// 上一个点 168 private ArrayList<Point> points = null;// 记录全部点 169 private Polygon tempPolygon = null;// 记录绘制过程中的多边形 170 171 public MapTouchListener(Context context, MapView view) { 172 super(context, view); 173 points = new ArrayList<Point>(); 174 } 175 176 // 三种画图的类型 177 public void setType(String geometryType) { 178 if (geometryType.equalsIgnoreCase("Point")) { 179 this.geoType = Geometry.Type.POINT; 180 } else if (geometryType.equalsIgnoreCase("Polyline")) { 181 this.geoType = Geometry.Type.POLYLINE; 182 } else if (geometryType.equalsIgnoreCase("Polygon")) { 183 this.geoType = Geometry.Type.POLYGON; 184 } else { 185 this.geoType = null; 186 } 187 } 188 189 public Geometry.Type getType() { 190 return this.geoType; 191 } 192 193 @Override 194 public boolean onSingleTap(MotionEvent point) { 195 Point ptCurrent = mapview.toMapPoint(new Point(point.getX(), point 196 .getY())); 197 // 画点 198 if (geoType == Geometry.Type.POINT) { 199 ptStart = ptCurrent; 200 Graphic graphic = new Graphic(ptCurrent, picSymbol); 201 drawLayer.addGraphic(graphic); 202 geometry = ptCurrent; 203 return true; 204 } 205 // 画线 206 else if (geoType == Geometry.Type.POLYLINE) { 207 points.add(ptCurrent);// 将当前点加入点集合中 208 if (ptStart == null) {// 画线第一个点 209 ptStart = ptCurrent; 210 Graphic graphic = new Graphic(ptStart, markerSymbol); 211 drawLayer.addGraphic(graphic); 212 } else { 213 // 根据当前点和前一个点画线 214 Graphic graphic = new Graphic(ptCurrent, markerSymbol); 215 drawLayer.addGraphic(graphic); 216 Line line = new Line(); 217 line.setStart(ptPrevious); 218 line.setEnd(ptCurrent); 219 Polyline polyline = new Polyline(); 220 polyline.addSegment(line, true); 221 Graphic g = new Graphic(polyline, lineSymbol); 222 geometry = polyline; 223 drawLayer.addGraphic(g); 224 } 225 ptPrevious = ptCurrent; 226 return true; 227 } 228 // 画面 229 else if (geoType == Geometry.Type.POLYGON) { 230 points.add(ptCurrent);// 将当前点加入点集合中 231 if (ptStart == null) {// 多边形的第一个点 232 ptStart = ptCurrent; 233 Graphic graphic = new Graphic(ptStart, markerSymbol); 234 drawLayer.addGraphic(graphic); 235 } else { 236 // 根据前一个点和当前点画出线,并将线条集中放入tempPolygon并画成图形 237 drawLayer.removeAll(); 238 Graphic graphic = new Graphic(ptCurrent, markerSymbol); 239 drawLayer.addGraphic(graphic); 240 Line line = new Line(); 241 line.setStart(ptPrevious); 242 line.setEnd(ptCurrent); 243 Polyline polyline = new Polyline(); 244 polyline.addSegment(line, true); 245 Graphic g = new Graphic(polyline, lineSymbol); 246 if (tempPolygon == null) { 247 tempPolygon = new Polygon(); 248 } 249 tempPolygon.addSegment(line, false); 250 geometry = tempPolygon; 251 Graphic g2 = new Graphic(tempPolygon, fillSymbol); 252 drawLayer.addGraphic(g2); 253 } 254 ptPrevious = ptCurrent; 255 return true; 256 } else { 257 return true; 258 } 259 260 } 261 262 // 双击事件 263 @Override 264 public boolean onDoubleTap(MotionEvent point) { 265 return false; 266 } 267 268 } 269 270 // 空间查询异步线程 271 class MyTask extends AsyncTask<IdentifyParameters, Void, IdentifyResult[]> { 272 IdentifyTask mIdentifyTask; 273 Geometry geometry; 274 275 public MyTask(Geometry geometry) { 276 super(); 277 this.geometry = geometry; 278 } 279 280 @Override 281 protected IdentifyResult[] doInBackground(IdentifyParameters... params) { 282 if (geometry != null) { 283 // 设置参数 284 IdentifyResult[] mResult = null; 285 IdentifyParameters param = new IdentifyParameters(); 286 param.setGeometry(geometry); 287 param.setSpatialReference(mapview.getSpatialReference());// 设置坐标系 288 param.setMapHeight(mapview.getHeight());// 设置地图像素高 289 param.setMapWidth(mapview.getWidth());// 设置地图像素宽 290 DisplayMetrics metric = new DisplayMetrics(); 291 getWindowManager().getDefaultDisplay().getMetrics(metric); 292 int densityDpi = metric.densityDpi; 293 param.setDPI(densityDpi); 294 Envelope env = new Envelope(); 295 mapview.getExtent().queryEnvelope(env); 296 param.setMapExtent(env);// 设置当前地图范围 297 298 // 设置地图信息的Url 299 mIdentifyTask = new IdentifyTask( 300 "http://10.50.50.6/ArcGIS/rest/services/GTJ_CZDJSH/MapServer"); 301 try { 302 mResult = mIdentifyTask.execute(param); 303 } catch (Exception e) { 304 System.out.println(e.getMessage()); 305 e.printStackTrace(); 306 } 307 return mResult; 308 } else { 309 return null; 310 } 311 } 312 313 @Override 314 protected void onPostExecute(IdentifyResult[] results) { 315 List<IdentifyResult> list = new ArrayList<IdentifyResult>(); 316 if (results != null) { 317 // 过滤信息 318 for (int index = 0; index < results.length; index++) { 319 if (!results[index].getLayerName().contains("嘉峪关市行政区")) { 320 list.add(results[index]); 321 } 322 323 } 324 325 // 获取第0个数据 并且是该区域高亮 326 if (list != null && list.size() > 0) { 327 IdentifyResult identifyResult = list.get(0); 328 Geometry geometry = identifyResult.getGeometry(); 329 Graphic graphic = null; 330 if (geometry.getType() == Geometry.Type.POINT) { 331 graphic = new Graphic(geometry, markerSymbol); 332 } else if (geometry.getType() == Geometry.Type.POLYLINE) { 333 graphic = new Graphic(geometry, lineSymbol); 334 } else if (geometry.getType() == Geometry.Type.POLYGON) { 335 graphic = new Graphic(geometry, fillSymbol2); 336 } 337 drawLayer.addGraphic(graphic); 338 // 地图位移到该位置 339 mapview.setExtent(geometry); 340 System.out.println(identifyResult.toString()); 341 } 342 } 343 } 344 } 345 346 // 缓冲区查询 异步线程 347 class MyTask2 extends AsyncTask<IdentifyParameters, Void, IdentifyResult[]> { 348 IdentifyTask mIdentifyTask; 349 Geometry geometry; 350 int buffer; 351 352 public MyTask2(Geometry geometry, int buffer) { 353 super(); 354 this.geometry = geometry; 355 this.buffer = buffer; 356 } 357 358 @Override 359 protected IdentifyResult[] doInBackground(IdentifyParameters... params) { 360 if (geometry != null) { 361 // 缓冲区图层绘制 362 SpatialReference spatialRef = SpatialReference.create(102100); 363 Polygon p = GeometryEngine.buffer(geometry, spatialRef, 364 this.buffer, Unit.create(LinearUnit.Code.METER)); 365 Graphic g = new Graphic(p, fillSymbol); 366 drawLayer.addGraphic(g); 367 368 // 设置参数 369 IdentifyResult[] mResult = null; 370 IdentifyParameters param = new IdentifyParameters(); 371 param.setGeometry(p); 372 param.setSpatialReference(mapview.getSpatialReference());// 设置坐标系 373 param.setMapHeight(mapview.getHeight());// 设置地图像素高 374 param.setMapWidth(mapview.getWidth());// 设置地图像素宽 375 DisplayMetrics metric = new DisplayMetrics(); 376 getWindowManager().getDefaultDisplay().getMetrics(metric); 377 int densityDpi = metric.densityDpi; 378 param.setDPI(densityDpi); 379 Envelope env = new Envelope(); 380 mapview.getExtent().queryEnvelope(env); 381 param.setMapExtent(env);// 设置当前地图范围 382 383 // 设置地图信息的Url 384 mIdentifyTask = new IdentifyTask( 385 "http://10.50.50.6/ArcGIS/rest/services/GTJ_CZDJSH/MapServer"); 386 try { 387 mResult = mIdentifyTask.execute(param); 388 } catch (Exception e) { 389 System.out.println(e.getMessage()); 390 e.printStackTrace(); 391 } 392 return mResult; 393 } else { 394 return null; 395 } 396 } 397 398 @Override 399 protected void onPostExecute(IdentifyResult[] results) { 400 List<IdentifyResult> list = new ArrayList<IdentifyResult>(); 401 if (results != null) { 402 // 过滤信息 403 for (int index = 0; index < results.length; index++) { 404 if (!results[index].getLayerName().contains("嘉峪关市行政区")) { 405 list.add(results[index]); 406 } 407 408 } 409 410 // 获取第0个数据 并且是该区域高亮 411 if (list != null && list.size() > 0) { 412 IdentifyResult identifyResult = list.get(0); 413 Geometry geometry = identifyResult.getGeometry(); 414 Graphic graphic = null; 415 if (geometry.getType() == Geometry.Type.POINT) { 416 graphic = new Graphic(geometry, markerSymbol); 417 } else if (geometry.getType() == Geometry.Type.POLYLINE) { 418 graphic = new Graphic(geometry, lineSymbol); 419 } else if (geometry.getType() == Geometry.Type.POLYGON) { 420 graphic = new Graphic(geometry, fillSymbol2); 421 } 422 drawLayer.addGraphic(graphic); 423 // 地图位移到该位置 424 mapview.setExtent(geometry); 425 System.out.println(identifyResult.toString()); 426 } 427 } 428 } 429 } 430 431 // 模糊查询异步线程 432 class MyTask3 extends AsyncTask<FindParameters, Void, List<FindResult>> { 433 FindTask mFindTask; 434 String text; 435 436 public MyTask3(String text) { 437 super(); 438 this.text = text; 439 } 440 441 @Override 442 protected List<FindResult> doInBackground(FindParameters... params) { 443 List<FindResult> mResult = null; 444 FindParameters param = new FindParameters(); 445 param.setReturnGeometry(true);// 需要返回Geometry 446 param.setSearchText(this.text);// 搜索关键字 447 param.setLayerIds(new int[] { 6 });// 查找图层(默认为查找所有图层) 448 param.setSearchFields(new String[] { "土地使用者" }); 449 mFindTask = new FindTask( 450 "http://10.50.50.6/ArcGIS/rest/services/GTJ_CZDJSH/MapServer"); 451 try { 452 mResult = mFindTask.execute(param); 453 } catch (Exception e) { 454 // TODO Auto-generated catch block 455 e.printStackTrace(); 456 } 457 return mResult; 458 459 } 460 461 @Override 462 protected void onPostExecute(List<FindResult> results) { 463 System.out.println(results.size()); 464 // 获取第0个数据 并且是该区域高亮 465 if (results != null && results.size() > 0) { 466 FindResult FindResult = results.get(0); 467 Geometry geometry = FindResult.getGeometry(); 468 Graphic graphic = null; 469 if (geometry.getType() == Geometry.Type.POINT) { 470 graphic = new Graphic(geometry, markerSymbol); 471 } else if (geometry.getType() == Geometry.Type.POLYLINE) { 472 graphic = new Graphic(geometry, lineSymbol); 473 } else if (geometry.getType() == Geometry.Type.POLYGON) { 474 graphic = new Graphic(geometry, fillSymbol2); 475 } 476 drawLayer.addGraphic(graphic); 477 // 地图位移到该位置 478 mapview.setExtent(geometry); 479 System.out.println(FindResult.toString()); 480 } 481 } 482 } 483 484 // 专题分析线程 485 class MyTask4 extends AsyncTask<Query, Void, FeatureSet> { 486 QueryTask mQueryTask; 487 Geometry geometry; 488 489 public MyTask4(Geometry geometry) { 490 super(); 491 this.geometry = geometry; 492 } 493 494 @Override 495 protected FeatureSet doInBackground(Query... params) { 496 FeatureSet result = null; 497 // 规定好相交模型 获取图层结果 498 mQueryTask = new QueryTask( 499 "http://10.50.50.6/ArcGIS/rest/services/GTJ_CZDJSH/MapServer/6"); 500 Query query = new Query(); 501 query.setOutFields(new String[] { "*" }); 502 query.setGeometry(geometry); 503 query.setReturnGeometry(true); 504 query.setOutSpatialReference(mapview.getSpatialReference()); 505 query.setSpatialRelationship(SpatialRelationship.INTERSECTS); 506 try { 507 result = mQueryTask.execute(query); 508 } catch (Exception e) { 509 System.out.println(e.getMessage()); 510 e.printStackTrace(); 511 } 512 return result; 513 } 514 515 @Override 516 protected void onPostExecute(FeatureSet result) { 517 // 获取每一个图层 518 Graphic[] graphics = result.getGraphics(); 519 for (int i = 0; i < graphics.length; i++) { 520 Geometry geometry = graphics[i].getGeometry(); 521 // 获取相交图形 522 Geometry geometry2 = GeometryEngine.intersect(geometry, 523 this.geometry, mapview.getSpatialReference()); 524 Graphic graphic1 = new Graphic(geometry, fillSymbol4); 525 Graphic graphic2 = new Graphic(geometry2, fillSymbol3); 526 // 计算面积 527 System.out.println(geometry2.calculateArea2D()); 528 drawLayer.addGraphic(graphic1); 529 drawLayer.addGraphic(graphic2); 530 } 531 532 } 533 } 534 535 // 计算 536 public void calc() { 537 // 计算点的坐标 538 if (mapTouchListener.getType() == Geometry.Type.POINT) { 539 String latlng = mapTouchListener.ptStart.getX() + "," 540 + mapTouchListener.ptStart.getY(); 541 Toast.makeText(ArcGisHandleActivity.this, latlng, 542 Toast.LENGTH_SHORT).show(); 543 } 544 // 计算线的长度 545 else if (mapTouchListener.getType() == Geometry.Type.POLYLINE) { 546 Polyline polyline = new Polyline(); 547 Point startPoint = null; 548 Point endPoint = null; 549 // 通过点的集合把所有的线描绘出来,并且计算 550 for (int i = 1; i < mapTouchListener.points.size(); i++) { 551 startPoint = mapTouchListener.points.get(i - 1); 552 endPoint = mapTouchListener.points.get(i); 553 Line line = new Line(); 554 line.setStart(startPoint); 555 line.setEnd(endPoint); 556 polyline.addSegment(line, false); 557 } 558 String length = Double.toString(Math.round(polyline 559 .calculateLength2D())) + " 米"; 560 Toast.makeText(ArcGisHandleActivity.this, length, 561 Toast.LENGTH_SHORT).show(); 562 } 563 // 计算图形的面积 564 else if (mapTouchListener.getType() == Geometry.Type.POLYGON) { 565 Polygon polygon = new Polygon(); 566 Point startPoint = null; 567 Point endPoint = null; 568 // 通过点的集合把所有的线描绘出来,并且传入polygon,然后计算面积 569 for (int i = 1; i < mapTouchListener.points.size(); i++) { 570 startPoint = mapTouchListener.points.get(i - 1); 571 endPoint = mapTouchListener.points.get(i); 572 573 Line line = new Line(); 574 line.setStart(startPoint); 575 line.setEnd(endPoint); 576 polygon.addSegment(line, false); 577 } 578 String sArea = getAreaString(polygon.calculateArea2D()); 579 Toast.makeText(ArcGisHandleActivity.this, sArea, Toast.LENGTH_SHORT) 580 .show(); 581 } else { 582 583 } 584 585 } 586 587 // 计算面积 588 private String getAreaString(double dValue) { 589 long area = Math.abs(Math.round(dValue)); 590 String sArea = ""; 591 // 顺时针绘制多边形,面积为正,逆时针绘制,则面积为负 592 if (area >= 1000000) { 593 double dArea = area / 1000000.0; 594 sArea = Double.toString(dArea) + " 平方公里"; 595 } else 596 sArea = Double.toString(area) + " 平方米"; 597 598 return sArea; 599 } 600 601 class Onclick implements OnClickListener { 602 603 @Override 604 public void onClick(View v) { 605 switch (v.getId()) { 606 // 放大 607 case R.id.zoomin: 608 mapview.zoomin(); 609 break; 610 // 缩小 611 case R.id.zoomout: 612 mapview.zoomout(); 613 break; 614 // 添加第一个图层 index=1 615 case R.id.addlayer1: 616 ArcGISDynamicMapServiceLayer dynamicMapServiceLayer1 = new ArcGISDynamicMapServiceLayer( 617 "http://10.50.50.6/ArcGIS/rest/services/GTJ_TDLYXZT/MapServer"); 618 dynamicMapServiceLayer1.setOpacity(0.5f); 619 mapview.addLayer(dynamicMapServiceLayer1, 1); 620 break; 621 // 添加第二个图层 index=2 622 case R.id.addlayer2: 623 ArcGISDynamicMapServiceLayer dynamicMapServiceLayer2 = new ArcGISDynamicMapServiceLayer( 624 "http://10.50.50.6/ArcGIS/rest/services/GTJ_CZDJSH/MapServer"); 625 dynamicMapServiceLayer2.setOpacity(0.5f); 626 mapview.addLayer(dynamicMapServiceLayer2, 2); 627 break; 628 // 画点 629 case R.id.drawpoint: 630 mapTouchListener.ptStart = null; 631 mapTouchListener.ptPrevious = null; 632 mapTouchListener.points.clear(); 633 mapTouchListener.tempPolygon = null; 634 mapTouchListener.setType("Point"); 635 break; 636 // 画线 637 case R.id.drawline: 638 mapTouchListener.ptStart = null; 639 mapTouchListener.ptPrevious = null; 640 mapTouchListener.points.clear(); 641 mapTouchListener.tempPolygon = null; 642 mapTouchListener.setType("Polyline"); 643 break; 644 // 画面 645 case R.id.drawpolygon: 646 mapTouchListener.ptStart = null; 647 mapTouchListener.ptPrevious = null; 648 mapTouchListener.points.clear(); 649 mapTouchListener.tempPolygon = null; 650 mapTouchListener.setType("Polygon"); 651 break; 652 // 清除画板 653 case R.id.clean: 654 geometry = null; 655 drawLayer.removeAll(); 656 mapTouchListener.ptStart = null; 657 mapTouchListener.ptPrevious = null; 658 mapTouchListener.points.clear(); 659 mapTouchListener.tempPolygon = null; 660 mapTouchListener.setType(""); 661 break; 662 // 清楚第一个图层 663 case R.id.cleanlayer: 664 mapview.removeLayer(1); 665 break; 666 // 计算 667 case R.id.calc: 668 calc(); 669 break; 670 // 查询 671 case R.id.search: 672 // 异步获取地理信息 673 new MyTask(geometry).execute(); 674 break; 675 case R.id.search2: 676 // 异步获取地理信息 677 new MyTask2(geometry, 10).execute(); 678 break; 679 case R.id.search3: 680 // 异步获取地理信息 681 new MyTask3("张海").execute(); 682 break; 683 case R.id.search4: 684 // 异步获取地理信息 685 new MyTask4(geometry).execute(); 686 break; 687 case R.id.btn_line: 688 List<Point> list = getPointList(); 689 for (int i = 0; i < list.size(); i++) { 690 Line line = new Line(); 691 line.setStart(new Point(list.get(0).getX(), list.get(0) 692 .getY())); 693 line.setEnd(new Point(list.get(1).getX(), list.get(1) 694 .getY())); 695 Polyline polyline = new Polyline(); 696 polyline.addSegment(line, true); 697 Graphic g = new Graphic(polyline, lineSymbol); 698 drawLayer.addGraphic(g); 699 } 700 break; 701 case R.id.btn_rectangle: 702 Envelope elope = new Envelope(3.3437058041800953E7, 703 4411930.256464715, 3.3433762387338314E7, 704 4415067.189463225); 705 SimpleFillSymbol sfs = new SimpleFillSymbol(Color.GREEN); 706 sfs.setAlpha(60); 707 drawLayer.addGraphic(new Graphic(elope, sfs)); 708 break; 709 case R.id.btn_polygonal: 710 Polygon py = new Polygon(); 711 py.startPath(new Point(3.3430444761173524E7, 4418097.292269631)); 712 py.lineTo(new Point(3.342695869070306E7, 4412426.6831117235)); 713 py.lineTo(new Point(3.3431528664667748E7, 4407419.65485851)); 714 py.lineTo(new Point(3.343876445803166E7, 4409500.890103303)); 715 py.lineTo(new Point(3.343738760831217E7, 4415593.776775944)); 716 py.lineTo(new Point(3.3430444761173524E7, 4418097.292269631)); 717 Graphic g = new Graphic(py, fillSymbol); 718 drawLayer.addGraphic(g); 719 break; 720 default: 721 break; 722 } 723 } 724 } 725 726 private List<Point> getPointList() { 727 List<Point> list = new ArrayList<Point>(); 728 list.add(new Point(3.3429800278327744E7, 4418791.035334834)); 729 list.add(new Point(3.342733952188005E7, 4413331.565192465)); 730 return list; 731 } 732 }
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".MainActivity" > 6 7 <com.esri.android.map.MapView 8 android:id="@+id/map" 9 android:layout_width="match_parent" 10 android:layout_height="match_parent" > 11 </com.esri.android.map.MapView> 12 13 <LinearLayout 14 android:id="@+id/ly1" 15 android:layout_width="fill_parent" 16 android:layout_height="wrap_content" 17 android:orientation="horizontal" > 18 19 <Button 20 android:id="@+id/zoomin" 21 android:layout_width="50dip" 22 android:layout_height="50dip" 23 android:text="放大" 24 android:textSize="12sp" /> 25 26 <Button 27 android:id="@+id/zoomout" 28 android:layout_width="50dip" 29 android:layout_height="50dip" 30 android:text="缩小" 31 android:textSize="12sp" /> 32 33 <Button 34 android:id="@+id/btn_line" 35 android:layout_width="50dip" 36 android:layout_height="50dip" 37 android:text="直线" 38 android:textSize="12sp" /> 39 40 <Button 41 android:id="@+id/btn_rectangle" 42 android:layout_width="50dip" 43 android:layout_height="50dip" 44 android:text="矩形" 45 android:textSize="12sp" /> 46 47 <Button 48 android:id="@+id/btn_polygonal" 49 android:layout_width="50dip" 50 android:layout_height="50dip" 51 android:text="多边形" 52 android:textSize="12sp" /> 53 </LinearLayout> 54 55 <LinearLayout 56 android:id="@+id/ly2" 57 android:layout_width="fill_parent" 58 android:layout_height="wrap_content" 59 android:layout_below="@+id/ly1" 60 android:orientation="horizontal" > 61 62 <Button 63 android:id="@+id/drawpoint" 64 android:layout_width="50dip" 65 android:layout_height="50dip" 66 android:text="画点" 67 android:textSize="12sp" /> 68 69 <Button 70 android:id="@+id/drawline" 71 android:layout_width="50dip" 72 android:layout_height="50dip" 73 android:text="画线" 74 android:textSize="12sp" /> 75 76 <Button 77 android:id="@+id/drawpolygon" 78 android:layout_width="50dip" 79 android:layout_height="50dip" 80 android:text="画面" 81 android:textSize="12sp" /> 82 83 <Button 84 android:id="@+id/calc" 85 android:layout_width="50dip" 86 android:layout_height="50dip" 87 android:text="计算" 88 android:textSize="12sp" /> 89 90 <Button 91 android:id="@+id/clean" 92 android:layout_width="50dip" 93 android:layout_height="50dip" 94 android:text="清空" 95 android:textSize="12sp" /> 96 </LinearLayout> 97 98 <LinearLayout 99 android:id="@+id/ly3" 100 android:layout_width="fill_parent" 101 android:layout_height="wrap_content" 102 android:layout_below="@+id/ly2" 103 android:orientation="horizontal" > 104 105 <Button 106 android:id="@+id/search" 107 android:layout_width="wrap_content" 108 android:layout_height="50dip" 109 android:text="空间查询" 110 android:textSize="12sp" /> 111 112 <Button 113 android:id="@+id/search2" 114 android:layout_width="wrap_content" 115 android:layout_height="50dip" 116 android:text="缓冲区查询" 117 android:textSize="12sp" /> 118 119 <Button 120 android:id="@+id/search3" 121 android:layout_width="wrap_content" 122 android:layout_height="50dip" 123 android:text="模糊查询" 124 android:textSize="12sp" /> 125 126 <Button 127 android:id="@+id/search4" 128 android:layout_width="wrap_content" 129 android:layout_height="50dip" 130 android:text="专题分析" 131 android:textSize="12sp" /> 132 </LinearLayout> 133 134 <LinearLayout 135 android:layout_width="fill_parent" 136 android:layout_height="wrap_content" 137 android:layout_below="@+id/ly3" 138 android:orientation="horizontal" > 139 140 <Button 141 android:id="@+id/addlayer1" 142 android:layout_width="wrap_content" 143 android:layout_height="50dip" 144 android:text="添加图层一" 145 android:textSize="12sp" /> 146 147 <Button 148 android:id="@+id/addlayer2" 149 android:layout_width="wrap_content" 150 android:layout_height="50dip" 151 android:text="添加图层二" 152 android:textSize="12sp" /> 153 154 <Button 155 android:id="@+id/cleanlayer" 156 android:layout_width="wrap_content" 157 android:layout_height="50dip" 158 android:text="清空图层一" 159 android:textSize="12sp" /> 160 </LinearLayout> 161 162 </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="orange">#7ff67516</color> <color name="blue">#ff23acde</color> <color name="half_blue">#6f23acde</color> <color name="yellow">#fff29900</color> <color name="red">#7ff29900</color> </resources>