java – 如何从ElasticSearch中的形状获取交叉点
发布时间:2020-12-15 00:36:15 所属栏目:Java 来源:网络整理
导读:我已将ElasticSearch中的路径存储为Polygon.现在我有一个圆(一个点和一个半径),我能够检查圆点与多边形是否相交(下面是我使用的代码). 问题:如何获得与圆相交的路线中的点? public Boolean isMatchingDoc(Long elasticDocId,Double latitude,Double longit
我已将ElasticSearch中的路径存储为Polygon.现在我有一个圆(一个点和一个半径),我能够检查圆点与多边形是否相交(下面是我使用的代码).
问题:如何获得与圆相交的路线中的点? public Boolean isMatchingDoc(Long elasticDocId,Double latitude,Double longitude,Long radius) { Coordinate origin = new Coordinate(latitude,longitude); ShapeBuilder circleShapeBuilder = ShapeBuilder.newCircleBuilder().center(origin).radius(radius,DistanceUnit.METERS); GeoShapeQueryBuilder geoShapeQueryBuilder = QueryBuilders.geoShapeQuery("route",circleShapeBuilder); SearchRequestBuilder finalQuery = client.prepareSearch(INDEX).setTypes(TYPE) .setQuery(QueryBuilders.termQuery("_id",elasticDocId)).setPostFilter(geoShapeQueryBuilder); SearchResponse searchResponse = finalQuery.execute().actionGet(); SearchHits searchHits = searchResponse.getHits(); if (searchHits.getTotalHits() > 0) { return true; } return false; } 解决方法
我想你知道使用elasticsearch,你可以查询与给定圆相交的多边形吗?见
https://www.elastic.co/guide/en/elasticsearch/guide/current/querying-geo-shapes.html.
这有两个原因可能对您没有帮助: >您的路线不是多边形,而是线条. Elasticsearch可能无法为您方便地解决这个问题.如果您将单独存储所有线段而不是每个路径存储一个巨大的多边形,则可以解决这个问题.然后,每个线段必须具有引用其所属路线的属性.这种方法听起来对你有用吗? 无论如何,我建议你看一下“空间数据库”的主题: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |