1、上一章讲了arcgis for android 入门与提高(九)地理查询 + 触摸事件,本节讲一个应用,给定一个地理范围,判断当前位置是否进入到划定的围栏(可以构建多个围栏,判断这个点是否在所有的多边形内)。最好基于arcgis for android 入门与提高(六)定位https://blog.csdn.net/HB_Programmer/article/details/119993487,用获取的当前位置判断是否进入地理围栏。

2、原理是一点是否在多边形内,所以只要判断当前的经纬度是否在构建的多边形内:

//判断坐标点是否落在指定的多边形区域内
public boolean IsInPolygon(double lon, double lat, List<String> list) {double x = lon;double y = lat;int isum, icount, index;double dLon1, dLon2, dLat1, dLat2, dLon;if (list.size() < 3) {return false;}isum = 0;icount = list.size();for (index = 0; index < icount - 1; index++) {//防止越界if (index == icount - 1) {dLon1 = Double.parseDouble(list.get(index).split(",")[0]);dLat1 = Double.parseDouble(list.get(index).split(",")[1]);dLon2 = Double.parseDouble(list.get(0).split(",")[0]);dLat2 = Double.parseDouble(list.get(0).split(",")[1]);} else {dLon1 = Double.parseDouble(list.get(index).split(",")[0]);dLat1 = Double.parseDouble(list.get(index).split(",")[1]);dLon2 = Double.parseDouble(list.get(index + 1).split(",")[0]);dLat2 = Double.parseDouble(list.get(index + 1).split(",")[1]);}// 判断指定点的 纬度是否在 相邻两个点(不为同一点)的纬度之间if (((y >= dLat1) && (y < dLat2)) || ((y >= dLat2) && (y < dLat1))) {if (Math.abs(dLat1 - dLat2) > 0) {dLon = dLon1 - ((dLon1 - dLon2) * (dLat1 - y)) / (dLat1 - dLat2);if (dLon < x) {isum++;}}}}if ((isum % 2) != 0) {return true;} else {return false;}
}

当返回结果为true代表在多边形内,反之在外。

private List<List> mListList = new ArrayList<>();

mListList 存放的是多个多边形,比如mListList [0]代表第一个多边形,以此类推。

3、可以用shape导出为geojson格式的数据,mapshaper,记得把所有的shape数据都拖到这个网址,geojson数据格式如下,需要注意的是要构成一个闭环,即第一个点和最后一个点一样:

{"type": "FeatureCollection","features": [{"type": "Feature","geometry": {"type": "Polygon","coordinates": [[[114.68084061102523,34.776011272681835],[114.68085373060241,34.77571327085743],[114.68117234890524,34.775700151280255],[114.6811667262293,34.77601314690715],[114.68084061102523,34.776011272681835]]]},"properties": {"name": "测试"}}]
}

然后解析:

//解析geojson
JSONObject jsonObject = new JSONObject(ret);
JSONArray jsonArray = jsonObject.getJSONArray("features");
for (int i = 0; i < jsonArray.length(); i++) {List<String> temp = new ArrayList<>();JSONObject object = jsonArray.getJSONObject(i);JSONObject geometry = object.getJSONObject("geometry");JSONArray coordinates = geometry.getJSONArray("coordinates").getJSONArray(0);for (int j = 0; j < coordinates.length(); j++) {JSONArray point = coordinates.getJSONArray(j);temp.add(point.toString().substring(1, point.toString().length() - 1));}mListList.add(temp);

4、结果处理:

int len = mListList.size();
for (int i = 0; i < len; i++) {mLon = "114";mLat = "34";if (IsInPolygon(Double.parseDouble(mLon), Double.parseDouble(mLat), mListList.get(i))) {textViewStatus.setText("状态: 在电子围栏内");break;} else {textViewStatus.setText("状态: 在电子围栏外");}
}

arcgis for android(十)地理(电子)围栏实现相关推荐

  1. android studio高德地图的显示于定位(附带逆地理编码围栏)

    首先注册高德成为开发者(打开高德地图,点击底部的开发者平台),创建应用,按照要求填写相应信息 网站:http://lbs.amap.com/api/android-sdk/guide/create-p ...

  2. arcgis for android(一)配置Android Sutdio环境

    1.做了一年多的Android GIS开发,突然想做个深刻的总结,记录这一年两个月收获的点点滴滴和遇到的难题,给自己一个交代,不留遗憾! 2.esri 这两年在开发接口方面做了很大的改进和提升,给gi ...

  3. arcgis for android离线编辑,操作方法:直接从 Android 或 iOS 设备访问 Collector for ArcGIS 中的离线编辑内容...

    操作方法:直接从 Android 或 iOS 设备访问 Collector for ArcGIS 中的离线编辑内容 摘要 Collector for ArcGIS 会将离线副本存储在 SQLite 数 ...

  4. android 漂亮的表单界面,面向ArcGIS for Android的表单界面生成器的设计与实现

    孙俊英 陈忠超 摘 要:基于ArcGIS for Android的采集系统作为当下主要的野外采样方式之一,被广泛的应用于各类场景,针对不同采集内容,采集系统的主要差异在于采样的属性数据所有不同,使用传 ...

  5. arcgis for android sdk下载地址,Arcgis Runtime sdk for android 授权

    要下载和安装 ArcGISRuntime SDK for Android,您需要注册开发者账户,进而便拥有了访问所有功能的权限,从而实现开发和测试目的.但是,这种情况下,应用程序中的所有地图都具有水印 ...

  6. arcgis for android(五)加载天地图

    1.上一篇文章arcgis for android 入门与提高(四)去掉属性标记和水印arcgis for android 入门与提高(四)去掉属性标记和水印_郝大大的博客-CSDN博客,接下来介绍国 ...

  7. 视频教程-初级学习ArcGis for Android 视频课程-Android

    初级学习ArcGis for Android 视频课程 从事软件开发10年,熟悉软件开发流程,精通WEB系统程序开发.先后参与水利厅,环保厅,国税局,国土资源厅等重大项目的建设.精通地理信息系统研发, ...

  8. arcgis for android离线编辑,ArcGIS for Android离线数据编辑实现原理

     实现ArcGIS for Android上的离线数据编辑,具体实现环境及其步骤如下: 一.      环境准备 1.        软件环境 1)        ArcGIS Server10用 ...

  9. Arcgis for Android 空间数据WKT与JSON描述

    点线面数据标准格式 一. 点 WKT: POINT(-118.4 -45.2) JSON: { "x": -118.4, "y": -45.2, "s ...

最新文章

  1. linux 生成dll文件,Linux和Windows平台 动态库.so和.dll文件的生成
  2. 服务器根目录文件配置文件,在文档根目录中存储安装和配置文件
  3. alert(1) to win 16
  4. ob_start ob_end_clean的用法 fetch
  5. linux c程序中内核态与用户态内存存储问题
  6. 让数据大白于天下:GCC插件实现代码分析和安全审计
  7. Hive TopN+分组TopN
  8. C++ STL sort 函数的用法(自定义排序函数)
  9. 1097: 计算平均成绩(函数专题)
  10. 工作流引擎的流程业务表设计
  11. Android IMEI和MEID获取问题记录
  12. 西游记中的袁守诚的真实身份是谁?为何能知玉帝谕旨?
  13. Word处理控件Aspose.Words功能演示:使用 Java 将 Word 文档转换为 Markdown
  14. Linux服务器安装的anaconda下载库、包很慢
  15. 列表表达式爬取红牛分公司数据
  16. 第一期vue项目实践问题与收获总结
  17. 记录和“异地恋女友”的第一次相见
  18. unsplash 图片版权
  19. 中英文维基百科语料上的Word2Vec实验
  20. 小程序中如何正确使用换行符‘\n‘

热门文章

  1. 计算机故障维修要遵循什么原则,计算机故障排除原则和方法;
  2. 如何修改pdf文件中文字的大小及颜色
  3. Codeforces Round #606 (Div. 2) A ~ C
  4. Leetcode 606: 根据二叉树建立字符串
  5. css系列-ol,ul
  6. 思科—三层交换机实现不同vlan的PC互通
  7. 京东商城的title
  8. 网易伏羲私有云在资源调度及资源整合方面的实践
  9. Java安全攻防之从wsProxy到AbstractTranslet
  10. 三节课:SQL进阶总结