anonymous1234
Cadet 4th Year
- Registriert
- Sep. 2011
- Beiträge
- 84
Ich habe momentan ein kleines Problem und komme nicht weiter.
(Ich habe diese Frage auch schon auf [http://stackoverflow.com/questions/...round-an-other-using-google-maps-corodinates] stack overflow [/URL] gestellt, aber keine passende Antwort bekommen. Hoffe das ist daher ok sie nochmal hier zu stellen).
Und zwar habe ich von Google Maps ein Ground Overlay mit folgenden Werten abgefragt:
Nun will ich testen, ob bestimmte Punkte innerhalb dieses rotierten Rechteckes liegen.
Meine Grundidee hierfür war: Ich rotiere den Punkt, für den ich testen möchte, ob er innerhalb des Rechteckes liegt zurück und muss dann das überschneiden nur noch für ein regulares (nicht rotiertes) Rechteck testen.
Allerdings scheine ich noch irgendwelche Fehler zu machen, vll auch grundlegende Denkfehler.
Das Ergebnis von diesem Test ist false, true, true, false obwohl es 4x true sein müsste.
Eigentlich kann der Fehler nur bei der Rotation liegen, denn bei rotation = 0 scheint alles zu klappen wie es soll.
Ich hoffe jemand hat eine Idee, denn ich hänge an der Stelle schon über eine Woche.
Schon mal Danke für jede Hilfe im voraus.
(Ich habe diese Frage auch schon auf [http://stackoverflow.com/questions/...round-an-other-using-google-maps-corodinates] stack overflow [/URL] gestellt, aber keine passende Antwort bekommen. Hoffe das ist daher ok sie nochmal hier zu stellen).
Und zwar habe ich von Google Maps ein Ground Overlay mit folgenden Werten abgefragt:
Code:
<LatLonBox>
<north>53.10685</north>
<south>53.10637222222223</south>
<east>8.853144444444444</east>
<west>8.851858333333333</west>
<rotation>-26.3448</rotation>
</LatLonBox>
Nun will ich testen, ob bestimmte Punkte innerhalb dieses rotierten Rechteckes liegen.
Meine Grundidee hierfür war: Ich rotiere den Punkt, für den ich testen möchte, ob er innerhalb des Rechteckes liegt zurück und muss dann das überschneiden nur noch für ein regulares (nicht rotiertes) Rechteck testen.
Code:
public static MyGeoPoint rotatePoint(MyGeoPoint point, MyGeoPoint origion, double degree)
{
double x = origion.getLongitude() + (Math.cos(Math.toRadians(degree)) * (point.getLongitude() - origion.getLongitude()) - Math.sin(Math.toRadians(degree)) * (point.getLatitude() - origion.getLatitude()));
double y = origion.getLatitude() + (Math.sin(Math.toRadians(degree)) * (point.getLongitude() - origion.getLongitude()) + Math.cos(Math.toRadians(degree)) * (point.getLatitude() - origion.getLatitude()));
return new MyGeoPoint(x, y);
}
Code:
public boolean intersect(MyGeoPoint geoPoint)
{
geoPoint = MyGeoPoint.rotatePoint(geoPoint, this.getCenter(), - this.getRotation());
return (geoPoint.getLatitude() < getTopLeftLatitude()
&& geoPoint.getLatitude() > getBottomRightLatitude()
&& geoPoint.getLongitude() > getTopLeftLongitude()
&& geoPoint.getLongitude() < getBottomRightLongitude());
}
Allerdings scheine ich noch irgendwelche Fehler zu machen, vll auch grundlegende Denkfehler.
Code:
LatLonBox box = new LatLonBox(53.10685, 8.851858333333333, 53.10637222222223, 8.853144444444444, -26.3448);
MyGeoPoint point1 = new MyGeoPoint(8.852311, 53.106872);
MyGeoPoint point2 = new MyGeoPoint(8.852967186822669, 53.10670378322918);
MyGeoPoint point3 = new MyGeoPoint(8.851994565566875, 53.10652664993972);
MyGeoPoint point4 = new MyGeoPoint(8.85270995172055, 53.10631650700605);
System.out.println(box.intersect(point1));
System.out.println(box.intersect(point2));
System.out.println(box.intersect(point3));
System.out.println(box.intersect(point4));
Das Ergebnis von diesem Test ist false, true, true, false obwohl es 4x true sein müsste.
Eigentlich kann der Fehler nur bei der Rotation liegen, denn bei rotation = 0 scheint alles zu klappen wie es soll.
Ich hoffe jemand hat eine Idee, denn ich hänge an der Stelle schon über eine Woche.
Schon mal Danke für jede Hilfe im voraus.
Zuletzt bearbeitet: