Karte eingrenzen mit OpenLayers.Bounds?
Hallo, ich spiele jetzt seid einiger Zeit mit dem SlippyMap Generator http://forum.openstreetmap.org/viewtopic.php?id=2420 rum. Jetzt möchte ich, dass die Karte nur in einem bestimmten Bereich angezeigt wird. Code: map = new OpenLayers.Map('map', { projection: new OpenLayers.Projection("EPSG:900913"), displayProjection: new OpenLayers.Projection("EPSG:4326"), controls: [ new OpenLayers.Control.MouseDefaults()], maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34, 20037508.34, 20037508.34), numZoomLevels: 18, maxResolution: 156543, units: 'meters' }); Ich denke, das dafür der Eintrag Code: OpenLayers.Bounds(-20037508.34,-20037508.34, 20037508.34, 20037508.34) zuständig ist. Leider kann ich in die Zahlen nichts vernünftiges rein interpretieren. Auch die OpenLayers Hilfe schweigt sich dazu aus http://dev.openlayers.org/docs/files/Op ... ds-js.html nur das es sich dabei um die Koordinten links, unten, rechts und oben handelt. Die Zahlen sehen jetzt aber nicht wirklich nach Geokoordinaten aus. Wie komme ich jetzt von den GPS Koordinaten auf die richtige Zahl? Oder ist OpenLayers.Bounds gar nicht der richtige Eintrag? Danke Andreas
papa@engel-city.de schrieb:
Hallo,
...
Jetzt möchte ich, dass die Karte nur in einem bestimmten Bereich angezeigt wird. Code:
map = new OpenLayers.Map('map', { projection: new OpenLayers.Projection("EPSG:900913"), displayProjection: new OpenLayers.Projection("EPSG:4326"), controls: [ new OpenLayers.Control.MouseDefaults()], maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34, 20037508.34, 20037508.34), numZoomLevels: 18, maxResolution: 156543, units: 'meters' });
Ich denke, das dafür der Eintrag Code:
OpenLayers.Bounds(-20037508.34,-20037508.34, 20037508.34, 20037508.34)
zuständig ist. Leider kann ich in die Zahlen nichts vernünftiges rein interpretieren. Auch die OpenLayers Hilfe schweigt sich dazu aus http://dev.openlayers.org/docs/files/Op … ds-js.html <http://dev.openlayers.org/docs/files/OpenLayers/BaseTypes/Bounds-js.html> nur das es sich dabei um die Koordinten links, unten, rechts und oben handelt. Die Zahlen sehen jetzt aber nicht wirklich nach Geokoordinaten aus. Wie komme ich jetzt von den GPS Koordinaten auf die richtige Zahl? Oder ist OpenLayers.Bounds gar nicht der richtige Eintrag?
Hallo Andreas, hier wird mit 2 verschiedenen Koordinatensystemen hantiert. Jedes System wird durch eine Nummer bezeichnet, den EPSG-Code. Die Koordinaten sind in EPSG:4326 gespeichert, das sind die geografischen Koordinaten. Die eignen sich in unseren Breiten nicht so recht für die Darstellung, weil die Meridianstreifen hier schon spitz zulaufen, aber noch genau so breit angezeigt werden, wie am Äquator. Daher sind die Längen verzerrt und die Winkel werden schief. "EPSG:900913" ist kein offizieller EPSG-Code sondern "von Google erfunden" worden. In PostGIS und proj4 muss man sie nachtragen um damit zu arbeiten, OpenLayers kennt dies System aber. http://www.spatialreference.org/ref/?search=900913 --> http://www.spatialreference.org/ref/sr-org/6627/ http://trac.openlayers.org/wiki/SphericalMercator OpenLayers: Auf meiner Homepage verwende ich für die Positionierung auf das Stadtgebiet von Lemgo folgenden Code: var min = lonLatToMercator(new OpenLayers.LonLat(8.83, 52.016)); var max = lonLatToMercator(new OpenLayers.LonLat(8.93, 52.046)); var bbox = new OpenLayers.Bounds(min.lon, min.lat, max.lon, max.lat); map.zoomToExtent(bbox); Ich gebe die Werte also in geogr. Koordinaten an, lasse sie aber in das Anzeige-System umrechnen. Die Function "lonLatToMercator" steckt in map.js. Das "zoomTo" im Init-Script definiert die anfängliche Sicht, man kann aber dann wieder hinaus-zoomen. Es ist also keine Begrenzung der Karte. Hier abgucken: http://www.fotodrachen.de/osm_lemgo.htm http://www.fotodrachen.de//javascripts/map.js http://www.fotodrachen.de//javascripts/OpenStreetMap.js Ach ja, ich wollte dir gelegentlich noch die Koordinaten durchsagen um die "Wanderkarte" auf ganz Lippe zu erweitern. Oder gibt es die inzwischen irgendwo flächendeckend von einem TileServer? -- Frank
On Sun, Mar 22, 2009 at 05:48:13PM +0100, papa@engel-city.de wrote:
Hallo,
ich spiele jetzt seid einiger Zeit mit dem SlippyMap Generator
http://forum.openstreetmap.org/viewtopic.php?id=2420
rum. Jetzt möchte ich, dass die Karte nur in einem bestimmten Bereich angezeigt wird.
Habe ich fuer die Volkslauf Karte auch gemacht http://volkslauf.osm.lab.rfc822.org/map.js SO habe ich ich das gebaut: rext = new OpenLayers.Bounds(); rext.extend(lonLatToMercator(new OpenLayers.LonLat(8.1046,51.9505))); rext.extend(lonLatToMercator(new OpenLayers.LonLat(8.2883,52.0272))); rext.toBBOX(); Und dann via restrictedExtent: rext, im new OpenLayer.Map angeben ... Mein Bereich war so klein das auch die ganzen zoom level keinen sinn machten - Das kleiner zu kriegen ist aber nur magic und weder mit Doku, guten Worten oder Beispielen zu verstehen. Flo -- Florian Lohoff flo@rfc822.org +49-171-2280134 Those who would give up a little freedom to get a little security shall soon have neither - Benjamin Franklin
participants (3)
-
Florian Lohoff -
Frank Jäger -
papa@engel-city.de