上一讲中我们学会了如何在MapView中添加Graphic要素,那么在百度或高德地图中,当我们点击要素时,会显示出相应的详细信息。在GraphicsLayer中也提供了这样的方法。下面我们来学习在GraphicsLayer中如何点击查找要素。 首先在MapView中添加两个Graphic要素。代码如下,注意这里用Graphic(Geometry geometry, Symbol symbol, Map<String, Object> attributes)来实例化Graphic,Map<String, Object> attributes是要素的属性值。详细见以下代码。TILED_WORLD_STREETS_URL为网络图层地址。

  1. private void initLayer() {
  2. mapView.addLayer(new ArcGISTiledMapServiceLayer(
  3. TILED_WORLD_STREETS_URL));
  4. graphicsLayer = new GraphicsLayer();
  5. mapView.addLayer(graphicsLayer);
  6. Polygon polygon = new Polygon();
  7. polygon.startPath(new Point(1.2575908509778766E7,2879410.9266042486));
  8. polygon.lineTo(new Point(1.284360696117901E7,3021972.232083669));
  9. polygon.lineTo(new Point(1.2826182801620414E7,2713089.403544925));
  10. Map<String, Object> attr1 = new HashMap<>();
  11. attr1.put("name", "广州");
  12. attr1.put("mark", "广州是南方的城市");
  13. Graphic graphic1 = new Graphic(polygon, new SimpleFillSymbol(Color.RED),attr1);
  14. graphicsLayer.addGraphic(graphic1);
  15. Polygon polygon2 = new Polygon();
  16. polygon2.startPath(new Point(1.3388507951011453E7,3611225.628065273));
  17. polygon2.lineTo(new Point(1.3607101952746565E7,3858331.890896268));
  18. polygon2.lineTo(new Point(1.3613438010767872E7,3449656.14852193));
  19. Map<String, Object> attr2 = new HashMap<>();
  20. attr2.put("name", "上海");
  21. attr2.put("mark", "上海是中部的城市");
  22. Graphic graphic2 = new Graphic(polygon2, new SimpleFillSymbol(Color.GREEN),attr2);
  23. graphicsLayer.addGraphic(graphic2);
  24. }

效果图如下:

准备工作完成后,设置MapView的点击事件,

  1. mapView.setOnSingleTapListener(new OnSingleTapListener() {
  2. @Override
  3. public void onSingleTap(float x, float y) {
  4. // TODO Auto-generated method stub
  5. handleSingleTap(x,y);
  6. }
  7. });

在handleSingleTap方法中来处理查询事件,GraphicsLayer查询要用到getGraphicIDs(float x, float y, int tolerance, int numberOfResults)或者getGraphicIDs(float x, float y, int tolerance)方法,前面两个参数是地图点击时的

x与y的值,tolerance是围绕x与y这个点所查询的范围,numberOfResults是要返回结果的大小。

  1. /**
  2. * GraphicsLayer的点击查询
  3. * @param x
  4. * @param y
  5. */
  6. protected void handleSingleTap(float x, float y) {
  7. int[] graphicIds = graphicsLayer.getGraphicIDs(x, y, 8);
  8. if (graphicIds!=null&&graphicIds.length>0) {
  9. for (int i = 0; i < graphicIds.length; i++) {
  10. Graphic graphic = graphicsLayer.getGraphic(graphicIds[i]);
  11. Map<String,Object> attr = graphic.getAttributes();
  12. Log.i(TAG, attr.get("name")+"===="+attr.get("mark"));
  13. }
  14. }
  15. }这样当我们点击要素时,会打出以下的信息。

Android GIS开发系列-- 入门季(4) GraphicsLayer的点击查询要素的更多相关文章

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

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

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

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

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

    GraphicsLayer是图形图层,可以自定义图形添加到地图上.调用GraphicsLayer的addGraphic方法就能添加图形,此方法要一个Graphic对象,此对象的构造方法是Graphic ...

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

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

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

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

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

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

  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. linux mint 18.3设置分辨率死机问题的解决方法

    linux mint 18.3由高分辨率设置为低分辨率的时候,会出现死机现象. 解决方法是:使用命令行: xrandr 查询所有支持的分辨率 然后通过 xrandr -s 1920x1080_59.9 ...

  2. c++中的类型转换--reinterpret_cast

    原文链接:  浅析c++中的类型转换--reinterpret_cast转换 reinterpret_cast作用为: 允许将任何指针转换为任何其他指针类型. 也允许将任何整数类型转换为任何指针类型以 ...

  3. bootstrap datatable 数据刷新问题

    在项目中,页面初始化的时候,通过通过向后台请求数据,页面初始化完之后,datatable是有数据的,当我点击页面的搜索按钮(按照时间过滤数据),datatable的数据要能重新刷新或者重载:这一点,我 ...

  4. HDU_1072_Nightmare

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1072 题目描述:矩阵表示迷宫,0表示墙,1表示路,2表示起点,3表示终点,4表示重置炸弹时间(6秒),你需 ...

  5. POJ_2195_Going Home

    题意:用'H','m','.'作出矩阵,'H'代表房子,'m'代表人,人一次只能水平或者垂直移动到相邻的点,问所有人一共走的步数的最小值. 分析:明显的求二分图最大权匹配.KM算法求得的是最大权匹配, ...

  6. 梦想CAD控件安卓参数绘图

    在CAD绘图中,参数化绘图可以帮助我们极大缩短设计时间,用户可以按照设计意图控制绘图对象,这样即使对象发生了变化,具体的关系和测量数据仍将保持不变,能够对几何图形和标注进行控制,可以帮助用户应对耗时的 ...

  7. 15Microsoft SQL Server 数据库维护

    Microsoft SQL Server 数据库维护 2.6.1数据库联机与脱机 --联机:该状态为数据库正常状态,也就是我们常看到的数据库的状态,该状态下的数据库处于可操作状态,可以对数据库进行任何 ...

  8. PHP下载压缩包文件

    PHP 压缩文件需要用到 ZipArchive 类,Windows 环境需要打开 php_zip.dll扩展. 压缩文件 $zip = new ZipArchive(); // 打开一个zip文档,Z ...

  9. 数字图像处理技术在TWaver可视化中的应用

    数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.常用的图像处理方法有图像增强.复原.编码.压缩等,数 ...

  10. angular5中的自定义指令(属性指令)

    属性型指令用于改变一个 DOM 元素的外观或行为. 在 Angular 中有三种类型的指令: 组件 — 拥有模板的指令 结构型指令 — 通过添加和移除 DOM 元素改变 DOM 布局的指令 属性型指令 ...