Ho memorizzato un percorso in ElasticSearch
come poligono. Ora ho un cerchio (un punto e un raggio), sono in grado di controllare che i punti del cerchio intersechi il poligono o meno (di seguito è riportato il codice che ho usato).Come ottenere i punti di intersezione dalla forma in ElasticSearch
Domanda: Come posso ottenere i punti nel percorso che interseca il cerchio?
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;
}
Poiché si dispone di un poligono, si dispone di un gruppo di linee che è possibile verificare per l'intersezione. Dovresti essere in grado di trovare molti metodi su come farlo in una ricerca web (cercherò sia "intersezione della linea circolare" o "intersezione poligonale del cerchio") – Thomas
@Thomas ho provato quelli già. Non posso andare e applicare manualmente una formula su tutti questi punti. Ho molti dati Quindi non sto cercando una soluzione pronta per l'uso. Ho controllato l'API ES e non l'ho trovato .... –
Non capisco perché non dovrebbe essere possibile. Basta passare i punti e scorrere su di essi, costruendo un segmento di linea da i e i + 1 e verificando che per l'intersezione. Le prestazioni potrebbero essere un problema se si hanno molti punti, ma ci sono alcune opzioni per accelerare le cose, anche se ciò sarebbe applicabile dipende dalle circostanze. – Thomas