Ich arbeite an einer App, die eine Google-Karte und eine Polylinie hat, um eine Route anzugeben. Was ich will, ist, dass wenn der Benutzer die Karte öffnet, wird automatisch eine Markierung auf den nächsten Punkt zwischen dem Benutzer und der Polylinie gesetzt.Holen Sie sich den nächstgelegenen Punkt von ArrayList <LatLng>
Ich habe bereits eine Funktion eingerichtet, die den nächsten Punkt vom Benutzer zur Polylinie bringt. Wenn der Abstand < 600 ist, wird an dieser Stelle ein Marker gesetzt. Aber was ich will, ist, alle Koordinaten zu nehmen (der Polylinie), die < 600 Meter vom Benutzer sind und wählen Sie die nächstgelegene ... dies ist mein Code
Linienzug Arraylist:
public ArrayList<LatLng> polylineList(){
ArrayList<LatLng> coords = new ArrayList<LatLng>();
coords.add(new LatLng(25.71687391423798,-100.3730825815284));
coords.add(new LatLng(25.71682182829175,-100.3733097782636));
coords.add(new LatLng(25.71678126641878, -100.374090669652));
coords.add(new LatLng(25.71683201122758, -100.3731781269444));
coords.add(new LatLng(25.72018196813817, -100.3735084186905));
coords.add(new LatLng(25.72031604576068, -100.3736959395207));
coords.add(new LatLng(25.71998332400039, -100.3762802484946));
coords.add(new LatLng(25.71994816609866, -100.3764646004368));
coords.add(new LatLng(25.72208094229626, -100.3773901496331));
coords.add(new LatLng(25.72139701948525, -100.3784182403878));
coords.add(new LatLng(25.72088085424743, -100.3792655793197));
coords.add(new LatLng(25.7211341509678, -100.3796660319109));
coords.add(new LatLng(25.72119368137114, -100.3807655073227));
coords.add(new LatLng(25.72102639768713, -100.3811907891904));
coords.add(new LatLng(25.72079498457438, -100.3810006195533));
coords.add(new LatLng(25.720670392499, -100.3799969462212));
coords.add(new LatLng(25.72062014771428, -100.3798718252661));
coords.add(new LatLng(25.71970136267208, -100.3812225396649));
coords.add(new LatLng(25.71935874972525, -100.3814558417726));
coords.add(new LatLng(25.71758071083912, -100.3839700351668));
coords.add(new LatLng(25.71722347802044, -100.3838886540422));
coords.add(new LatLng(25.71531766471047, -100.3815788239292));
coords.add(new LatLng(25.71564916096481, -100.3804237189767));
coords.add(new LatLng(25.7159267510913, -100.3800793191019));
coords.add(new LatLng(25.71627234185268, -100.3795543063391));
coords.add(new LatLng(25.71665021282444, -100.3790150094068));
Rückkehr Koordinaten; }
Dann bekomme ich den Standort des Benutzers und evaluiere die Koordinaten mit jedem ArrayList Index mit der HAVERSINE-Formel, wenn die Entfernung < 600 ist, wird es eine Markierung zeichnen.
for (int i = 0; i < polylineList().size(); i++) {
Double latit = polylineList.get(i).latitude;
Double longit = polylineList.get(i).longitude;
LatLng newLatLng = new LatLng(latit, longit);
Double distance = distanceHaversine(userlatit, latit, userlongit, longit);
if (distance < 600) {
drawMarker(newLatLng);
}
}
dies richtig funktioniert, aber es eine Menge von Markierungen in den Koordinaten zieht die < 600 Meter vom Standort des Benutzers sind. Was ich will, ist einen Marker nur am nächsten Punkt der Polylinie zu zeichnen. Eine Art von bewerten alle Koordinaten, die < 600 vom Benutzer sind und wählen Sie dann am nächsten. Schätze jede Hilfe.
danke für deine antwort, ich verstehe nicht warum: if (distance