MKMapRect und Anzeige von anzeigen-overlays, die sich über 180th meridian

Arbeite ich mit Fenstern und Grenzen kehrte aus Google Geocoding API. Wenn dabei die reverse geocoding für eine bestimmte Koordinate, der Dienst gibt mehrere Ergebnisse mit unterschiedlichen Granularität (Land -, Verwaltungs-Gebiet, Lokalität, sublocality, route, etc.). Ich möchte wählen Sie die am besten geeignete auf die Ergebnisse angesichts der aktuell sichtbare Bereich auf der Karte.

Habe ich beigelegt, Algorithmus, vergleicht die Verhältnisse der Flächen (in MKMapPoint2) von der Lage-viewport", den aktuellen Viewports und deren Kreuzung (mit MKMapRectIntersection - Funktion). Dies funktioniert sehr gut, solange sich die Lage viewport nicht erstrecken sich über die 180-meridian. In diesem Fall ist Ihre Schnittmenge ist 0.

Habe ich angefangen, zu untersuchen, die Ursache und als debugging-Hilfe-ich mache Anzeige MKPolygon overlays auf die Karte, um mir zu geben visuelle Hinweise, was Los ist. Vermeiden Sie mögliche Fehler eingeführt durch meinen code-Konvertierung zwischen geo-Koordinaten und MKMapRect habe ich konstruiert, die mit dem polygon-overlay mit original-Koordinaten aus Google-Ergebnisse wie dieses:

CLLocationCoordinate2D sw, ne, nw, se;
sw = location.viewportSouthWest.coordinate;
ne = location.viewportNorthEast.coordinate;
nw = CLLocationCoordinate2DMake(ne.latitude, sw.longitude);
se = CLLocationCoordinate2DMake(sw.latitude, ne.longitude);
CLLocationCoordinate2D coords[] = {nw, ne, se, sw};
MKPolygon *p = [MKPolygon polygonWithCoordinates:coords count:4];

Beispielsweise der problematischen Lage, hier ist der viewport zurückgegeben, für die Vereinigten Staaten, das Letzte Ergebnis vom Typ Land, wenn geocoding-Koordinaten irgendwo in Virginia:

Southwest: 18.9110643, 172.4546967  
Northeast: 71.3898880, -66.9453948

Beachten Sie, wie die Südwest-Koordinate, die sich in der unteren linken Ecke der Lage viewport liegt auf dem 180-meridian. Bei der Anzeige dieser Position überlagert, die als polygon auf der Karte zeigt es falsch an das Recht der USA Grenzen (großes braunes Rechteck, nur in der linken unteren Ecke sichtbar):

MKMapRect und Anzeige von anzeigen-overlays, die sich über 180th meridian
MKMapRect und Anzeige von anzeigen-overlays, die sich über 180th meridian

Ähnlich, Anzeige Lage viewport für Russland zeigt das Rechteck falsch positioniert Links von der Grenze zu Russland.

Visuell bestätigt, dass es ähnliche problem, wenn ich konvertieren Sie die Lage viewport MKMapPoints und MKMapRect und finden keine Schnittmenge zwischen den kartenviewport (weißes Rechteck im Bild oben) und die Lage viewport.

Den Weg berechne ich die map rect ist ähnlich wie Antworten in dieser Frage ALSO:

Wie passen eine bestimmte Grenzen, die aus der NE-und SW-Koordinaten in den sichtbaren Kartenausschnitt?

...das funktioniert , es sei denn die Koordinaten Spannweite der 180th meridian. Die Prüfung der MKMapRect mit MKMapRectSpans180thMeridian zurück false, so dass Bau-Methode ist falsch.

Apple-Dokumentation ist nicht hilfreich in dieser Hinsicht. Einzige Hinweis den ich gefunden habe ist in MKOverlay.h:

//boundingMapRect should be the smallest rectangle that completely contains
//the overlay.
//For overlays that span the 180th meridian, boundingMapRect should have 
//either a negative MinX or a MaxX that is greater than MKMapSizeWorld.width.
@property (nonatomic, readonly) MKMapRect boundingMapRect;

Was ist der richtige Weg, um die polygon-overlay, die sich über die 180th meridian?

Wie Sie sich richtig zu konstruieren MKMapRect über 180th meridian?

InformationsquelleAutor Palimondo | 2012-01-26
Schreibe einen Kommentar