概述
在Java中使用ArcGIS Java SDK 判断点是否在面内
面的地理数据是从ArcGIS Server 查询过来然后在项目运行时放入redis数据库中
点只有经纬度,是从MySql数据库中查询出来的集合中的属性
从ArcGIS Server 查询的过程与代码在上一篇ArcGIS Runtime API for Java 查询中
https://blog.csdn.net/weixin_50074995/article/details/117067751?spm=1001.2014.3001.5501
在查询过来后想存入redis的时候也遇到了问题
一开始存的是Iterator < Feature > 迭代器,但是发现取出来后根本用不了
然后试着存了结果集 FeatureQueryResult 也是一样的无法使用
后来试着把Feature 和 Geometry 存入,结果数据太多redis直接炸了
最后试着把 Geometry 用自带的 toJson 方法转为JSON字符串后放入List再放入redis这次就成功了
在功能模块中判断点是否在面内
先把从redis数据库里取出的JSON字符串转为 Geometry 几何对象
再根据从数据库中提出的经纬度新建为 point 点对象(必须先判断是否为空)
再使用 GeometryEngine 的 contains(geometry, point) 方法判断点是否在面中
但是在这一步出现了问题,错误提示是无效参数 Invalid argument
com.esri.arcgisruntime.ArcGISRuntimeException: Invalid argument
这个时候我尝试了把 point 转为 Geometry 对象再比较
尝试了直接强转 (Geometry) 和把 point 转为JSON字符串在转为 Geometry 对象
结果都解决不了这个问题,这个时候意识到可能不是对象的问题,毕竟 Point 也是 Geometry 的子类
后来研究了官方的API后发现Point 的构造方法中还有一个方法是带了
SpatialReference 参数的
https://developers.arcgis.com/java/api-reference/reference/com/esri/arcgisruntime/geometry/Point.html(官方地址)
查询后知道了 SpatialReference 是空间参考
https://developers.arcgis.com/java/api-reference/reference/com/esri/arcgisruntime/geometry/SpatialReference.html(官方地址)
然后就试着在 Point 新建的时候带入 Geometry 的空间参考
这次就能成功判断了
最后
以上就是务实大白为你收集整理的ArcGIS Runtime API for Java 判断点是否在面内(Invalid argumen 错误)在Java中使用ArcGIS Java SDK 判断点是否在面内在功能模块中判断点是否在面内的全部内容,希望文章能够帮你解决ArcGIS Runtime API for Java 判断点是否在面内(Invalid argumen 错误)在Java中使用ArcGIS Java SDK 判断点是否在面内在功能模块中判断点是否在面内所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复