Brauche Hilfe mit Openlayers.Bounds

Hallo Ihr Guten,

ich bin gerade dabei mit jQuery und Javasript die Openlayers-Api zu nutzen, um einen Marker oder eine Box an eine beliebige, beim laden der Seite festgelegte Position auf der Standard OpenStreet-map zu setzen.

Das Anzeigen des Markers, der Box sowie der Karte funktioniert schon wunderbar, doch wir weder die Karte auf den richtigen Punkt gestartet, noch die Marker oder Box.

es wird nur die Karte mit 0;0 als Mittelpunkt angezeigt und auch Marker / Box werden auf die Koordinate 0;0 gesetzt.

hat Irgendjemand, eine Idee warum?

hier mal mein Code:

	openstreetRectangle : function(param) {
			var map, bounds, coords, defaults;
			var mapnik = new OpenLayers.Layer.OSM();
			defaults = {
				n : 50.930985,
				s : 50.92991,
				w : 11.587115,
				e : 11.588392
			};
			coords = $.extend(defaults, param);
			bounds = new OpenLayers.Bounds();
			bounds.extend(new OpenLayers.LonLat(coords.w, coords.s));
			bounds.extend(new OpenLayers.LonLat(coords.e, coords.n));
			map = new OpenLayers.Map("map");
			if ((coords.s == coords.n) && (coords.w == coords.e)) {
				var marker = new OpenLayers.Layer.Markers("marker");
				var size = new OpenLayers.Size(21, 25);
				var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
				var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png', size, offset);
				marker.addMarker(new OpenLayers.Marker(bounds.getCenterLonLat(), icon));
				map.addLayer(marker);
				// Note that if you pass an icon into the Marker constructor, it will
				// take that icon and use it. This means that you should not share icons
				// between markers -- you use them once, but you should clone() for any
				// additional markers using that same icon.
			} else {
				var boxes = new OpenLayers.Layer.Boxes("Boxes");
				var box = new OpenLayers.Marker.Box(bounds, "#008DCF", 4);
				boxes.addMarker(box);
				map.addLayer(boxes);
			}
			map.addLayer(mapnik);
			map.setCenter(bounds.getCenterLonLat(), 15);
		}

es macht übrigens keinen Unterschied, ob ich bounds.getCenterLonLat() aufrufe oder die Punkte mittels new openlayers.LonLat(…) übergebe.

MfG Basti890

Du hast Koordinaten in Länge/Breite und eine Karte in Mercatorprojektion (die schleicht sich über den OSM-Layer ein). Du musst also alle Koordinaten umrechnen, z.B. mit

bounds.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));

nach den beiden Zeilen mit “bounds.extend”. Vielleicht auch noch an ein paar anderen Stellen, die ich gerade nicht sehe.

Grüße, Max

Astrein, du bist mein Held :slight_smile:

nun funktioniert fast alles so, wie ich es will, wunderbar!

das einzigste Problem, was ich noch lösen will ist eine Art dynamischer Zoom, d.h. Ich hab ja alle Koordinaten und möchte, dass je nach dem, was ich für eine Fläche überspanne automatisch die kleinste passende Zoomstufe gewählt wird.
Bei der API von Google-maps ist das ein Befehl,

map.fit(bounds);

gibt es ein ähnlichen Befehl auch in der Ppenlayers-API, bzw, eine Möglichkeit die passende Zoomstufe berechnen zu lassen?

Ja - schau mal hier:

http://gis.stackexchange.com/questions/75149/openlayers-zoom-to-boundingbox-depends-on-lat-lon-positions

EDIT: Bzw hier: http://dev.openlayers.org/apidocs/files/OpenLayers/BaseTypes/Bounds-js.html

oh ja Danke, die Funktion

map.zoomToExtent(bounds);

regelt :slight_smile:

nun funzt alles, habt alle vielen Dank :slight_smile: