zoukankan      html  css  js  c++  java
  • ArcGis地图

      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>

  • 相关阅读:
    #Leetcode# 448. Find All Numbers Disappeared in an Array
    #Leetcode# 65. Valid Number
    #Leetcode# 37. Sudoku Solver
    #Leetcode# 25. Reverse Nodes in k-Group
    POJ 3264 Balanced Lineup
    HDU 3947 Assign the task
    Codeforces Round #546 (Div. 2)
    2019.08.18【NOIP?提高组】模拟 A 组 总结
    jzoj 6307. 安排
    jzoj 6305. 最小值
  • 原文地址:https://www.cnblogs.com/xiaoyao095/p/5057826.html
Copyright © 2011-2022 走看看