x

Brauche Hilfe mit Openlayers.Bounds


  1. Brauche Hilfe mit Openlayers.Bounds · Basti890 (Gast) · 14.02.2014 09:23 · [flux]

    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


    • Re: Brauche Hilfe mit Openlayers.Bounds · maxbe (Gast) · 14.02.2014 09:46 · [flux]

      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


    • Re: Brauche Hilfe mit Openlayers.Bounds · Basti890 (Gast) · 14.02.2014 10:01 · [flux]

      maxbe wrote:

      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 🙂

      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?



    • Re: Brauche Hilfe mit Openlayers.Bounds · Basti890 (Gast) · 14.02.2014 10:18 · [flux]

      tunnelbauer wrote:

      Ja - schau mal hier:

      http://gis.stackexchange.com/questions/ … -positions

      EDIT: Bzw hier: http://dev.openlayers.org/apidocs/files … ds-js.html

      oh ja Danke, die Funktion

      map.zoomToExtent(bounds);
      

      regelt 🙂

      nun funzt alles, habt alle vielen Dank 🙂