Wir möchten mehrere Markierungen auf einer statischen Karte anzeigen und die optimale Zoomstufe berechnen, wie dies bei Google Maps der Fall ist. Wir haben bereits das Begrenzungsrechteck und den Mittelpunkt der Karte berechnet, aber jetzt fällt es uns schwer, die richtige Zoomstufe für die Anzeige des gesamten Begrenzungsrechtecks zu berechnen. Kann uns bitte jemand in die richtige Richtung weisen?
google-maps
openstreetmap
tiles
extents
Tobias Schwarz
quelle
quelle
Antworten:
Um die Zoomstufe zu erhalten, müssen Sie die Pixelabmessungen Ihrer Karte kennen. Sie müssen auch in sphärischen Mercator-Koordinaten rechnen.
quelle
Dies ist der C # -Code, den ich in Maperitive verwende :
mapArea
: Begrenzungsrahmen in langen / lat-Koordinaten (x = lang, y = lat)paddingFactor
: Dies kann verwendet werden, um den "120%" -Effekt zu erzielen, auf den sich ThomM bezieht. Ein Wert von 1,2 würde Ihnen die 120% bringen.Beachten Sie, dass in meinem Fall
zoom
eine reelle Zahl sein kann. Bei Webkarten benötigen Sie einen ganzzahligen Zoomwert, daher sollten Sie so etwas wie verwenden(int)Math.Floor(zoom)
, um ihn abzurufen.Dieser Code gilt natürlich nur für die Web Mercator-Projektion.
quelle
GeometryUtils
wird hier nur verwendet, um Grad in Bogenmaß umzuwandeln, und zurück, es ist eine einfache mathematische Formel.Bounds2
ist im Grunde nur eine Rechteckstruktur. Dieser Code wurde eher als Pseudocode als als direkt kopierbarer Code bereitgestellt.Wenn Sie OpenLayers verwenden,
Map.getZoomForExtent
wird die höchste Zoomstufe berechnet, die für die gesamte Ausdehnung auf der Karte geeignet ist. Dasextent
muss in der Projektion der Karte sein. Sie können a auch verwendenfill_factor
, um die Anzeige von Punkten am Rand der Karte zu vermeiden undmax_zoom
den möglichen Zoom zu begrenzen:quelle