ArcGIS Runtime API for Java 判断点是否在面内(Invalid argumen 错误)

在Java中使用ArcGIS Java SDK 判断点是否在面内

面的地理数据是从ArcGIS Server 查询过来然后在项目运行时放入redis数据库中
点只有经纬度,是从MySql数据库中查询出来的集合中的属性
从ArcGIS Server 查询的过程与代码在上一篇ArcGIS Runtime API for Java 查询中
https://blog.youkuaiyun.com/weixin_50074995/article/details/117067751?spm=1001.2014.3001.5501

在查询过来后想存入redis的时候也遇到了问题
在这里插入图片描述一开始存的是Iterator < Feature > 迭代器,但是发现取出来后根本用不了
然后试着存了结果集 FeatureQueryResult 也是一样的无法使用
后来试着把FeatureGeometry 存入,结果数据太多redis直接炸了
最后试着把 Geometry 用自带的 toJson 方法转为JSON字符串后放入List再放入redis这次就成功了

在功能模块中判断点是否在面内

先把从redis数据库里取出的JSON字符串转为 Geometry 几何对象
在这里插入图片描述
再根据从数据库中提出的经纬度新建为 point 点对象(必须先判断是否为空)
在这里插入图片描述再使用 GeometryEnginecontains(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 的空间参考

在这里插入图片描述
在这里插入图片描述这次就能成功判断了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值