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添加点:

  1. Graphic graphic = new Graphic(point, new SimpleMarkerSymbol(Color.RED,5, SimpleMarkerSymbol.STYLE.CIRCLE));
  2. graphicsLayer.addGraphic(graphic);

二、添加线,样式有实线、虚线、点虚线、点点虚线、点线等。效果图如下:

  1. Polyline polyline = new Polyline();
  2. polyline.startPath(new Point(113,23));//第一个点用startPath,后面的点用lineTo方法
  3. polyline.lineTo(new Point(123,23));
  4. graphic = new Graphic(polyline,new SimpleLineSymbol(Color.RED,3, SimpleLineSymbol.STYLE.SOLID));
  5. graphicsLayer.addGraphic(graphic);

三、添加面Polygon,效果图如下:

  1. Polygon polygon = new Polygon();
  2. //第一个点startPath,后面的点用lineTo
  3. polygon.startPath(new Point(118,23));
  4. polygon.lineTo(new Point(118,15));
  5. polygon.lineTo(new Point(113,13));
  6. graphic = new Graphic(polygon,new SimpleFillSymbol(Color.GREEN,SimpleFillSymbol.STYLE.SOLID));
  7. graphicsLayer.addGraphic(graphic);

Code for all:

  1. package com.arcgis.test;
  2. import android.graphics.Color;
  3. import android.os.Bundle;
  4. import android.support.annotation.Nullable;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.view.View;
  7. import android.widget.AdapterView;
  8. import android.widget.Button;
  9. import android.widget.Spinner;
  10. import com.esri.android.map.GraphicsLayer;
  11. import com.esri.android.map.MapView;
  12. import com.esri.android.map.ags.ArcGISTiledMapServiceLayer;
  13. import com.esri.android.map.event.OnSingleTapListener;
  14. import com.esri.core.geometry.Point;
  15. import com.esri.core.geometry.Polygon;
  16. import com.esri.core.geometry.Polyline;
  17. import com.esri.core.map.Graphic;
  18. import com.esri.core.symbol.SimpleFillSymbol;
  19. import com.esri.core.symbol.SimpleLineSymbol;
  20. import com.esri.core.symbol.SimpleMarkerSymbol;
  21. import java.util.ArrayList;
  22. import java.util.List;
  23. public class GraphicActivity extends AppCompatActivity {
  24. private MapView mMapView;
  25. private Spinner graphicTypeSpinner;
  26. private Button clernBtn;
  27. private ArcGISTiledMapServiceLayer arcGISTiledMapServiceLayer;
  28. private GraphicsLayer graphicsLayer;
  29. private String mapServerUrl = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer";
  30. //点集合
  31. private List<Point> pointList = new ArrayList<>();
  32. private Graphic graphic;
  33. @Override
  34. protected void onCreate(@Nullable Bundle savedInstanceState) {
  35. super.onCreate(savedInstanceState);
  36. setContentView(R.layout.activity_graphic);
  37. initView();
  38. addLayer();
  39. }
  40. private void initView() {
  41. mMapView = (MapView) findViewById(R.id.map_view);
  42. //mapview点击事件
  43. mMapView.setOnSingleTapListener(new OnSingleTapListener() {
  44. @Override
  45. public void onSingleTap(float x, float y) {
  46. handleSingleTap(x, y);
  47. }
  48. });
  49. graphicTypeSpinner = (Spinner) findViewById(R.id.spinner_type);
  50. graphicTypeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  51. @Override
  52. public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
  53. pointList.removeAll(pointList);
  54. graphicsLayer.removeAll();
  55. }
  56. @Override
  57. public void onNothingSelected(AdapterView<?> parent) {
  58. }
  59. });
  60. clernBtn = (Button) findViewById(R.id.clear_graphic);
  61. clernBtn.setOnClickListener(new View.OnClickListener() {
  62. @Override
  63. public void onClick(View v) {
  64. pointList.removeAll(pointList);
  65. graphicsLayer.removeAll();
  66. }
  67. });
  68. }
  69. private void addLayer() {
  70. arcGISTiledMapServiceLayer = new ArcGISTiledMapServiceLayer(mapServerUrl);
  71. mMapView.addLayer(arcGISTiledMapServiceLayer);
  72. graphicsLayer = new GraphicsLayer();
  73. mMapView.addLayer(graphicsLayer);
  74. }
  75. private void handleSingleTap(float x, float y) {
  76. Point point = mMapView.toMapPoint(x, y);
  77. graphicsLayer.removeAll();
  78. pointList.add(point);
  79. String type = graphicTypeSpinner.getSelectedItem().toString().trim();
  80. switch (type) {
  81. case "点":
  82. graphic = new Graphic(point, new SimpleMarkerSymbol(Color.RED,5, SimpleMarkerSymbol.STYLE.CIRCLE));
  83. graphicsLayer.addGraphic(graphic);
  84. break;
  85. case "线":
  86. Polyline polyline = new Polyline();
  87. if (pointList.size()>1){
  88. for(int i=0;i<pointList.size();i++){
  89. if (i==0){
  90. polyline.startPath(pointList.get(i));
  91. }else{
  92. polyline.lineTo(pointList.get(i));
  93. }
  94. }
  95. }
  96. graphic = new Graphic(polyline,new SimpleLineSymbol(Color.RED,3, SimpleLineSymbol.STYLE.SOLID));
  97. graphicsLayer.addGraphic(graphic);
  98. break;
  99. case "面":
  100. Polygon polygon = new Polygon();
  101. for(int i=0;i<pointList.size();i++){
  102. if (i==0){
  103. polygon.startPath(pointList.get(i));
  104. }else{
  105. polygon.lineTo(pointList.get(i));
  106. }
  107. }
  108. graphic = new Graphic(polygon,new SimpleFillSymbol(Color.GREEN,SimpleFillSymbol.STYLE.SOLID));
  109. graphicsLayer.addGraphic(graphic);
  110. break;
  111. }
  112. }
  113. }

Android GIS开发系列-- 入门季(3) GraphicsLayer添加点、线、面的更多相关文章

  1. Android GIS开发系列-- 入门季(14)FeatureLayer之范围查询

    Android GIS开发系列-- 入门季(5),这篇文章中,我们知道如何去查找要素.现在有一个需求,查找某点5000米范围的要素,那如何来做呢?首先我们需要在地图上画个5000米半径的圆,然后根据Q ...

  2. Android GIS开发系列-- 入门季(6)GraphicsLayer添加文字与图片标签

    一.GraphicsLayer添加图片 GraphicLayer添加图片Graphic,要用到PictureMarkerSymbol,也是样式的一种.添加代码如下: Drawable drawable ...

  3. Android GIS开发系列-- 入门季(4) GraphicsLayer的点击查询要素

    上一讲中我们学会了如何在MapView中添加Graphic要素,那么在百度或高德地图中,当我们点击要素时,会显示出相应的详细信息.在GraphicsLayer中也提供了这样的方法.下面我们来学习在Gr ...

  4. Android GIS开发系列-- 入门季(1) 起点

    前言 这个系列,待最终完成更新,大家体谅点,第一版本全部是参考的网络教程,最近会逐步的细化更新为可以直接使用的情况. 本系列的开发基于AS (  Android Studio ), 和ArcGIS 的 ...

  5. Android GIS开发系列-- 入门季(2) MapView与图层介绍

    一.MapView MapView是Arcgis中的最基本的类,与高德地图SDK的MapView的重要性一样.MapView的创建有两种方法,一种是在Layout文件中直接写控件.一种是实例化,Map ...

  6. Android GIS开发系列-- 入门季(5) FeatureLayer加载本地shp文件与要素查询

    FeatureLayer是要素图层,也是Arcgis的主要图层.用这个图层可以加载本地的shp文件.下面我们看怎样加载shp文件到MapView中.查看ArcGis API可知FeatureLayer ...

  7. Android GIS开发系列-- 入门季(13)Gdal简单写个shp文件

    Gdal是用来读写栅格与矢量数据的,在Gdal官网,可以下载相关的资源进行平台的编译.其实Arcgis底层也是用Gdal来读取shp文件的,那在Android中可以直接读写shp文件吗,是可以的.这里 ...

  8. Android GIS开发系列-- 入门季(12) 显示载天地图

    在项目中可以经常需要动态加载一些图层,像投影地图服务.投影地图服务器.其实网上有大量这样的服务,比如天地图官网, . 随便点开一个服务,里面有相关的信息.那如何加载这样图层服务呢. 一.首先感谢这篇博 ...

  9. Android GIS开发系列-- 入门季(10) MapView快速定位到Geometry

    我们知道某个Geometry的坐标,但不知道具体的位置,该如何使地图快速定位呢?这时需要用到MapView.setExtent方法,来看下这个方法的介绍:Zooms the map to the gi ...

随机推荐

  1. SQL在一张表中根据父ID获取所有的子ID

    with a as ( select id,name,parentid from categories where id=53 union all select x.id,x.name,x.paren ...

  2. 喜欢Swift编程语言的人主要是初学者?

    一早一起来,朋友圈除了被苹果发布会刷屏外,还漫天散布着一条类似的招聘消息:“招聘iOS程序员,要求拥有5年的Swift开发经验,有狼性,待遇月薪20K+,专车接送.” 随后身边的朋友很快就开始调侃:& ...

  3. SQL Server的安装笔记

    SQL安装笔记 安装SQL Server 2008 打开SQL Server 2008中的setup.exe,显示SQL安装程序的对话框. 提示必须安装相关组件Microsoft.NET Framew ...

  4. asp.net MVC 和 webForm的区别

    asp.net MVC请求过程 ASP.NET MVC框架只是给开发者提供了开发web应用程序的一种选择,并不是要取代Webform这两种技术各有优缺点,开发者需要根据实际情况,选择对应的技术有时候, ...

  5. Android Measure 体系简单总结

    Android对View的测量是半协商半强制半模糊半具体的. 测量过程中的两套尺寸体系:  [半强制] ParentView**约束ChildView: **MeasureSpec(通过measure ...

  6. 16 this和super和构造代码块

    this关键词---当前类的对象的引用 public class Public { String name; int age; public static void main(String[] arg ...

  7. "ping: unknown host www.baidu.com"问题解决方式

    参考:https://blog.csdn.net/wbainngg123/article/details/51540535 在虚拟机VMware里选择桥接模式,并配置网络之后,发现ping ip地址可 ...

  8. enote笔记语言(3)(ver0.4)

    章节:enote笔记语言(3)     what&why(why not)&how&when&where&which:紫色,象征着神秘而又潜蕴着强大的力量,故取 ...

  9. 洛谷——P1073 最优贸易

    P1073 最优贸易 n 个城市间以 m 条有向道路连接, 小 T 从 1 号城市出发, 将要去往 n 号城市.小 T 观察到一款商品 Z 在不同的城市的价格可能不尽相同,小 T 想要在旅行中的某一个 ...

  10. 洛谷——P1120 小木棍 [数据加强版]

    P1120 小木棍 [数据加强版] 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过5050. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍 ...