我已经存储了一条路线ElasticSearch
作为多边形。现在我有一个圆(一个点和一个半径),我可以检查圆点是否与多边形相交(下面是我使用的代码)。
问题:如何获取与圆相交的路线上的点?
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 https://www.elastic.co/guide/en/elasticsearch/guide/current/querying-geo-shapes.html.
这可能对您没有帮助的原因有两个:
- 您的路线不是多边形,而是直线。
- 如果我正确地阅读了你的问题,你想知道交点的确切点。
Elasticsearch可能无法方便地为您解决这个问题。如果您将所有线段单独存储而不是每条路线存储在一个巨大的多边形中,则可能可以解决这个问题。每个线段都必须带有一个引用其所属路线的属性。这种方法对您来说可行吗?
无论如何,我建议您研究“空间数据库”主题:
空间数据库针对几何空间中的索引和搜索进行了优化。 PostgreSQL 和 MongoDB 等知名数据库都具有用于空间索引的插件/扩展。我不知道该推荐什么,但是MongoDB 地理空间 API https://docs.mongodb.com/manual/applications/geospatial-indexes/例如,看起来很有前途,因为它允许查询交集 - 并且它支持直线和多边形。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)