2017-12-04 7 views
1

Ich schreibe ein Java-Programm, um den gesamten Längen- und Breitengrad mit einem festen Abstand von meinem gegebenen Punkt zu generieren. die Entfernung muss genau 2000 km betragen, nicht 2000 km.Generieren Sie ein zufälliges Geopoint aus einem festen Abstand von einem gegebenen Breiten- und Längengrad

dies ist mein Code

public static void getLocation(double x0, double y0, int meters) { 
     Random random = new Random(); 

     // Convert radius from meters to degrees 
     double radiusInDegrees = meters/111000f; 

     double u = random.nextDouble(); 
     double v = random.nextDouble(); 
     double w = radiusInDegrees * Math.sqrt(u); 
     double t = 2 * Math.PI * v; 
     double x = w * Math.cos(t); 
     double y = w * Math.sin(t); 

     // Adjust the x-coordinate for the shrinking of the east-west distances 
     // double new_x = x/Math.cos(Math.toRadians(y0)); 

     double foundLongitude = x + x0; 
     double foundLatitude = y + y0; 
     System.out.println("Longitude: " + foundLongitude + " Latitude: " + foundLatitude); 
    } 

Wie mache ich die ganzen Punkt gleich weit entfernt von dem geo Punkt erzeugen, wie ein Kreis bilden?

+0

let Lager sagen wir geo Punkt mit den Koordinaten X, Y und Radius R. Sie die Koordinaten der Punkte entlang des gesamten Umfangs des Kreises, korrekt erhalten wollen, müssen? –

+0

yupppp ........... – user2399158

+0

Wählen Sie eine zufällige Peilung und verwenden Sie dann eine Abstands- und Peilformel, um das Ziel lat/long zu berechnen. [Diese Antwort] (https://stackoverflow.com/questions/10119479/calculating-lat-and-long-from-bearing-and-distance) hat eine Lösung. Einige weitere Details [hier] (https://www.movable-type.co.uk/scripts/latlong.html). – teppic

Antwort

0
public static void generatePoint(double latitude, double longitude, double distanceInMetres, double bearing) { 
     Random random = new Random(); 

     //int bear = random.nextInt(360); 
     double brngRad = Math.toRadians(bearing); 
     double latRad = Math.toRadians(latitude); 
     double lonRad = Math.toRadians(longitude); 
     int earthRadiusInMetres = 6371000; 
     double distFrac = distanceInMetres/earthRadiusInMetres; 

     double latitudeResult = Math.asin(Math.sin(latRad) * Math.cos(distFrac) + Math.cos(latRad) * Math.sin(distFrac) * Math.cos(brngRad)); 
     double a = Math.atan2(Math.sin(brngRad) * Math.sin(distFrac) * Math.cos(latRad), Math.cos(distFrac) - Math.sin(latRad) * Math.sin(latitudeResult)); 
     double longitudeResult = (lonRad + a + 3 * Math.PI) % (2 * Math.PI) - Math.PI; 

     System.out.println("bearing: "+bearing+ ", latitude: " + Math.toDegrees(latitudeResult) + ", longitude: " + Math.toDegrees(longitudeResult)); 
    } 

Bedarf hinzufügen

Verwandte Themen