Android GIS开发系列-- 入门季(3) GraphicsLayer添加点、线、面

简介:

GraphicsLayer是图形图层,可以自定义图形添加到地图上。调用GraphicsLayer的addGraphic方法就能添加图形,此方法要一个Graphic对象,此对象的构造方法Graphic(Geometry geometry, Symbol symbol),前面第一个是要素,而Geometry的子类有Envelope, MultiPath, MultiPointPointSegmentLinePolygonPolyline我们所常用的有点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.                        
  7.                 graphic = new Graphic(polygon,new SimpleFillSymbol(Color.GREEN,SimpleFillSymbol.STYLE.SOLID));  
  8.                 graphicsLayer.addGraphic(graphic);


   

Code for all:

 

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

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。

    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7751859.html ,如需转载请自行联系原作者

相关文章
|
2月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
251 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
221 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
552 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
511 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
2月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
136 0
|
3月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
206 6
|
5月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
364 11
|
5月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
186 0
|
9月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
2087 77
|
6月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
276 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡

热门文章

最新文章