was ich versuche zu tun: der Benutzer wählt Start und Ziel auf einer Karte und dann von ihren Koordinaten ich möchte den nächstgelegenen Ort aus einer Liste von Standorten auf der Karte zeigen . Ich habe eine einfache Sqlite-Datenbank, die den Längen-, Breiten- und Namen der möglichen Standorte enthält.Finden Sie den nächsten GPS-Punkt zum Benutzer Standort aus einer Liste
habe ich einige der Forschung, und das ist, was ich gefunden:
http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL
aber dies ist für die Verwendung mit MySQL und eine Art räumliche Such Verlängerung bedeutete. gibt es eine möglichkeit, dass ich etwas ähnliches mit android api oder externen libs tun kann?
public Point dialogFindClosestLocationToPoint(geometry.Point aStartPoint){
List<PointWithDistance> helperList=new ArrayList<PointWithDistance>();
try {
openDataBase();
Cursor c=getCursorQueryWithAllTheData();
if(c.moveToFirst())
do{
PointWithDistance helper=new PointWithDistance(c.getDouble(1),c.getDouble(2),c.getString(3));
int distance=returnDistanceBetween2Points(aStartPoint, helper);
if(distance<MAX_SEARCH_DISTANCE){
helper.setDistance(distance);
Log.i("values", helper.name);
helperList.add(helper);
}
}while (c.moveToNext());
Collections.sort(helperList,new PointComparator());
if(helperList!=null)
return helperList.get(0);
else return null;
}catch(SQLException sqle){
throw sqle;
}
finally{
close();
}
ist dies der Code in der PointComparator() Klasse:
public int compare(PointWithDistance o1, PointWithDistance o2) {
return (o1.getDistance()<o2.getDistance() ? -1 : (o1.getDistance()==o2.getDistance() ? 0 : 1));
}
wo PointWithDistance
ein Objekt ist, das enthält: lat, long, Entfernung, name
jedoch diese Lösung nicht der Fall ist biete die richtige return info ... und ich stelle fest, dass es überhaupt nicht skalierbar und sehr langsam ist. Ich brauche eine Lösung, die schnell mit einer Datenbank mit maximal 1000 Zeilen ausgeführt wird.
edit: meine es war ein Fehler in diesem Code in der Sortier jetzt habe ich es geändert (sollte < statt>)
Ich glaube, dass Sie Variablen durch PHP übergeben haben. $ lat ist Ihr aktueller Breitengrad, $ lon ist der aktuelle Breitengrad. Aber was ist $ R? –
Ist $ R der Erdradius nicht? siehe: http://www.movable-type.co.uk/scripts/latlong.html – leochab