GraphicsLayer是圖形圖層,可以自定義圖形添加到地圖上。調用GraphicsLayer的addGraphic方法就能添加圖形,此方法要一個Graphic對象,此對象的構造方法是Graphic(Geometry geometry, Symbol symbol),前面第一個是要素,而Geometry的子類有Envelope, MultiPath, MultiPoint, Point, Segment,Line, Polygon, Polyline。我們所常用的有點Point,線Polyline,面Polygon。而后面一
個參數是樣式,點的樣式是SimpleMarkerSymbol,線的樣式是SimpleLineSymbol,面的樣式是SimpleFillSymbol。
一、GraphicsLayer添加點:
- Graphic graphic = new Graphic(point, new SimpleMarkerSymbol(Color.RED,5, SimpleMarkerSymbol.STYLE.CIRCLE));
- graphicsLayer.addGraphic(graphic);
二、添加線,樣式有實線、虛線、點虛線、點點虛線、點線等。效果圖如下:
- Polyline polyline = new Polyline();
- polyline.startPath(new Point(113,23));//第一個點用startPath,后面的點用lineTo方法
- polyline.lineTo(new Point(123,23));
- graphic = new Graphic(polyline,new SimpleLineSymbol(Color.RED,3, SimpleLineSymbol.STYLE.SOLID));
- graphicsLayer.addGraphic(graphic);
三、添加面Polygon,效果圖如下:
- Polygon polygon = new Polygon();
- //第一個點startPath,后面的點用lineTo
- polygon.startPath(new Point(118,23));
- polygon.lineTo(new Point(118,15));
- polygon.lineTo(new Point(113,13));
- graphic = new Graphic(polygon,new SimpleFillSymbol(Color.GREEN,SimpleFillSymbol.STYLE.SOLID));
- graphicsLayer.addGraphic(graphic);
Code for all:
- package com.arcgis.test;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.support.annotation.Nullable;
- import android.support.v7.app.AppCompatActivity;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.Button;
- import android.widget.Spinner;
- import com.esri.android.map.GraphicsLayer;
- import com.esri.android.map.MapView;
- import com.esri.android.map.ags.ArcGISTiledMapServiceLayer;
- import com.esri.android.map.event.OnSingleTapListener;
- import com.esri.core.geometry.Point;
- import com.esri.core.geometry.Polygon;
- import com.esri.core.geometry.Polyline;
- import com.esri.core.map.Graphic;
- import com.esri.core.symbol.SimpleFillSymbol;
- import com.esri.core.symbol.SimpleLineSymbol;
- import com.esri.core.symbol.SimpleMarkerSymbol;
- import java.util.ArrayList;
- import java.util.List;
- public class GraphicActivity extends AppCompatActivity {
- private MapView mMapView;
- private Spinner graphicTypeSpinner;
- private Button clernBtn;
- private ArcGISTiledMapServiceLayer arcGISTiledMapServiceLayer;
- private GraphicsLayer graphicsLayer;
- private String mapServerUrl = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer";
- //點集合
- private List<Point> pointList = new ArrayList<>();
- private Graphic graphic;
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_graphic);
- initView();
- addLayer();
- }
- private void initView() {
- mMapView = (MapView) findViewById(R.id.map_view);
- //mapview點擊事件
- mMapView.setOnSingleTapListener(new OnSingleTapListener() {
- @Override
- public void onSingleTap(float x, float y) {
- handleSingleTap(x, y);
- }
- });
- graphicTypeSpinner = (Spinner) findViewById(R.id.spinner_type);
- graphicTypeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- pointList.removeAll(pointList);
- graphicsLayer.removeAll();
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- }
- });
- clernBtn = (Button) findViewById(R.id.clear_graphic);
- clernBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- pointList.removeAll(pointList);
- graphicsLayer.removeAll();
- }
- });
- }
- private void addLayer() {
- arcGISTiledMapServiceLayer = new ArcGISTiledMapServiceLayer(mapServerUrl);
- mMapView.addLayer(arcGISTiledMapServiceLayer);
- graphicsLayer = new GraphicsLayer();
- mMapView.addLayer(graphicsLayer);
- }
- private void handleSingleTap(float x, float y) {
- Point point = mMapView.toMapPoint(x, y);
- graphicsLayer.removeAll();
- pointList.add(point);
- String type = graphicTypeSpinner.getSelectedItem().toString().trim();
- switch (type) {
- case "點":
- graphic = new Graphic(point, new SimpleMarkerSymbol(Color.RED,5, SimpleMarkerSymbol.STYLE.CIRCLE));
- graphicsLayer.addGraphic(graphic);
- break;
- case "線":
- Polyline polyline = new Polyline();
- if (pointList.size()>1){
- for(int i=0;i<pointList.size();i++){
- if (i==0){
- polyline.startPath(pointList.get(i));
- }else{
- polyline.lineTo(pointList.get(i));
- }
- }
- }
- graphic = new Graphic(polyline,new SimpleLineSymbol(Color.RED,3, SimpleLineSymbol.STYLE.SOLID));
- graphicsLayer.addGraphic(graphic);
- break;
- case "面":
- Polygon polygon = new Polygon();
- for(int i=0;i<pointList.size();i++){
- if (i==0){
- polygon.startPath(pointList.get(i));
- }else{
- polygon.lineTo(pointList.get(i));
- }
- }
- graphic = new Graphic(polygon,new SimpleFillSymbol(Color.GREEN,SimpleFillSymbol.STYLE.SOLID));
- graphicsLayer.addGraphic(graphic);
- break;
- }
- }
- }