Ich habe einen POI-Punkt von Interesse ausgewählt auf einer bestimmten Breite und Länge und ich möchte ein paar zufällige Punkt, die höchstens 50 Meter entfernt sind, sehr genau erzeugen. Ich möchte nicht über 50 Fuß gehen, aber ich möchte auch, dass der zufällige Punkt gleichmäßig auf die 50 Fuß verteilt wird.Erzeugen Sie Punkte auf einer Kugel innerhalb eines bestimmten Radius von einem Punkt aus
Hier ist, was ich bisher habe, sieht es ziemlich gut aus, aber es erzeugt Entfernungen, die zu weit weg sind.
Meine beste Vermutung ist bisher, dass viele meiner Annahmen auf Kreisen statt auf Kugeln basieren.
x0 = Longitude of POI
y0 = Latitude of POI
u = Uniformly random number between [0,1)
v = Uniformly random number between [0,1)
r = 50*0.3048/111,300
r = maximum 50 foot radius distance new point is away from POI
0.3048 is to convert feet to meters
111,300 is to convert meters to degrees for earth
θ (or t) = 2π*v
θ (or t) = Uniformly random rotation around the polar axis
w = r*sqrt(u)
w = Non-uniformly random distance based on polar coordinate system
so points don’t clump near the center.
Δy = w*sin(θ)
Δy = New random delta change to latitude
standard w*sin(θ) for converting from polar to Cartesian coordinates
y1 = y0+Δy
y1 = New random latitude of new point
Δx = w*cos(θ)/cos(y1*π/180)
Δx = New random delta change to longitude
cos(y1*π/180) used to adjust for shrinking east west distances
as you move further away from the equator
x1 = x0+Δx
x1 = New random longitude of new point
einfach etwas mehr Kontext hinzufügen, ich mache diese innerhalb von SQL Server einer WKID 4326 Geographie Koordinatensystem und meine Arbeit mit STDistance überprüfen.
können Sie meine Formel verwenden ... [äquidistante Punkte auf der Kugel] (http://stackoverflow.com/a/25031737/2521214). Da Sie nicht den ganzen Globus abdecken, ignorieren Sie die "Ceil" -Rundung, um die Punkte wirklich äquidistant zu halten. – Spektre