x

3 Frage OpenLayers - Extend und geojson einbinden


  1. 3 Frage OpenLayers - Extend und geojson einbinden · Lübeck (Gast) · 03.05.2012 12:07 · [flux]

    Moin!

    vor ca. 14 Tagen hatte ich hier schon einmal ein Posting bezügl. geojson und OpenLayers.

    Nun hatte ich etwas Zeit und versucht die Karte zu erweitern - aber wie Ihr jetzt schon richtig vermutet sind Komplikationen aufgetreten. Nun hoffe ich das mir der eine oder andere weiterhelfen kann.


    Zoom-Fenster---

    Es geht im Beispiel [1] um die Fragestellung des Zoom auf ein bestimmtes Fenster wie auch die Eingrenzung der Karte auf einen bestimmten Bereich. Für letzteres habe ich mich an das Beispiel von Flohoff orientiert und die Transformation mittels transform von OL angesetzt.

    var map_area = new OpenLayers.Bounds();
    map_area.extend(new OpenLayers.LonLat(10.68221,53.83476).transform(geographic, mercator));
    map_area.extend(new OpenLayers.LonLat(10.70874,53.84561).transform(geographic, mercator));
    map_area.toBBOX();

    // Einrichten der Karte
    map = new OpenLayers.Map('map', {
    projection: geographic,
    displayProjection: mercator,
    controls: [
    new OpenLayers.Control.MouseDefaults(),
    new OpenLayers.Control.Attribution()],
    maxExtent: map_area,
    numZoomLevels: 18,
    maxResolution: 156543,
    units: 'meters'
    });

    Die verschiedenen Projektionen habe ich mit geographic bzw. mercator betitelt. Diese Art und Weise der Beschriftung habe ich in einem Web-Tutorial gefunden und fand ich persönlich sehr nachvollziehbar.

    Leider funktioniert dieser Teil bei mir local überhaupt nicht (derzeit kann ich auch nur primär lokal testen).

    Dann das mit dem Zoom-Befehl auf einen bestimmten Bereich. Dieses finde ich besser als über die Koordinate und den Zoomlevel da so gewährleistet wird das ein Bereich auch wirklich vollständig angezeigt wird.

    Dieses habe ich mit folgendem Code (Funktion: go2obj) realisiert:

    map.zoomToExtent(new
    OpenLayers.Bounds(min_lon, min_lat, max_lon, max_lat).transform(geographic, mercator)
    );

    Hier wird immer auf einen Bereich um 0 gezoomt - ich habe die Koordianten getauscht, transformation auch einmal weggelassen und .... alle anderen Varianten ausprobiert. Leider alles OHNE Erfolg!!!!

    Weiß einer warum?


    hinzuladen von externen GeoJSON-Daten ---

    Komme ich zur letzten Frage. In [2] hatte ich erfolgreich um Hilfestellung bei der Einbindung von GeoJSON-Daten gefragt und Hilfe bekommen. Nun wollte ich die Daten aus einer externen Datei einbinden um diese einfacher austauschen zu können. In dem Tutorial von Peter Robbins [3] hatte ich ein Beispiel gefunden um über .Protocol.HTTP eine exterene Datei einzubinden. Das sieht bei mir so aus:

    var vector_layer = new OpenLayers.Layer.Vector("Strassen und Wege", {
    style: {
    strokeColor: "blue",
    strokeWidth: 3,
    cursor: "pointer"
    },
    protocol: new OpenLayers.Protocol.HTTP({
    url: "schrebergarten.json",
    format: new OpenLayers.Format.GeoJSON({
    ignoreExtraDims: true,
    'externalProjection': mercator,
    'internalProjection': geographic
    })
    })
    });

    map.addLayer(vector_layer);

    Aber leider wird jetzt wieder einmal gar nichts angezeigt.


    zu guter Letzt ----

    ... noch eine Frage. Man kann GeoJSON-Daten filter, daran will ich mich versuchen, wenn o.g. Probleme gelöst sind. Kann man irgendwie die BBox der gefilterten GeoJSON-Daten ermitteln um darauf zu zoomen?

    Über eine Hilfe würde ich mich sehr freuen.

    Gruß Jan :-)

    [1] http://osm.tappenbeck.net/sandbox/schre … extent.htm

    [2] http://forum.openstreetmap.org/viewtopic.php?id=16335

    [3] http://www.peterrobins.co.uk/it/ollatency.html

    [4] http://osm.tappenbeck.net/sandbox/schre … x_json.htm


    • Re: 3 Frage OpenLayers - Extend und geojson einbinden · ikonor (Gast) · 03.05.2012 22:26 · [flux]

      [1] hat nen Fehler:

      Zeitstempel: 03.05.2012 23:04:28
      Fehler: OpenLayers.Layer.XYZ.Schreber is not a constructor
      Quelldatei: http://osm.tappenbeck.net/sandbox/schre … extent.htm
      Zeile: 87

      Lübeck wrote:

      Die verschiedenen Projektionen habe ich mit geographic bzw. mercator betitelt. Diese Art und Weise der Beschriftung habe ich in einem Web-Tutorial gefunden und fand ich persönlich sehr nachvollziehbar.

      Anscheinend doch nicht so richtig: 😉

      ␣␣␣geographic␣=␣new␣OpenLayers.Projection("EPSG:900913");
      mercator␣=␣new␣OpenLayers.Projection("EPSG:4326");
      

      EPSG:900913 ist Spherical Mercator und EPSG:4326 ist WGS 84 (geographic 3D). In der Map Definition ist es zwar namentlich falsch aber inhaltlich richtig zugeordnet, bei den transforms ist es aber namentlich richtig und inhaltlich falsch rum.

      Lübeck wrote:

      Hier wird immer auf einen Bereich um 0 gezoomt

      Das deutet eigentlich immer auf ein Problem bei der Projektion hin (siehe oben).

      Lübeck wrote:

      Aber leider wird jetzt wieder einmal gar nichts angezeigt.

      Wenn nicht mal die Basiskarte angezeigt wird deutet das auf einen JavaScript Fehler hin (siehe ganz oben).

      Lübeck wrote:

      ... noch eine Frage. Man kann GeoJSON-Daten filter, daran will ich mich versuchen, wenn o.g. Probleme gelöst sind. Kann man irgendwie die BBox der gefilterten GeoJSON-Daten ermitteln um darauf zu zoomen?

      layer.events.register("loadend",␣layer,
      function()␣{
      if␣(this.visibility)␣{
      var␣bounds␣=␣this.getDataExtent();
      lonLat␣=␣bounds.getCenterLonLat();
      map.setCenter(lonLat);
      map.zoomToExtent(bounds);
      }
      }
      );
      

    • Re: 3 Frage OpenLayers - Extend und geojson einbinden · Lübeck (Gast) · 05.05.2012 12:02 · [flux]

      hi!

      das mit Fehler bitte ich zu entschuldigen - hatte vergessen auf mapnik umzustellen anstatt der lokalen Tiles.

      Habe nun nachgebessert und es sollte funktionieren. Den Namen für die Systeme habe ich vorerst noch die EPSG-Codes zugewiesen.

      Neuer Link ist jetzt:
      http://osm.tappenbeck.net/sandbox/schre … 120505.htm

      Was aber immer noch ein Problem ist GeoJSON - es werden einfach keine Daten angezeigt.

      Hatte nochmal nachgelesen und danach ist eine externe und interne Projektion nicht erforderlich - aber auch ohne Erfolg entfernt.

      Kann nochmal einer schauen ?

      Gruß Jan :-)


    • Re: 3 Frage OpenLayers - Extend und geojson einbinden · mmd (Gast) · 05.05.2012 12:22 · [flux]

      Hi,

      evtl. fehlt da noch eine Strategy, wie hier unter Retrieving GeoJSON from the Database:

      ␣//␣Make␣a␣fresh␣vector␣layer,␣pulling␣features␣from␣our␣script␣URL
      json_layer␣=␣new␣OpenLayers.Layer.Vector("GeoJSON",␣{
      strategies:␣[new␣OpenLayers.Strategy.Fixed()],
      protocol:␣new␣OpenLayers.Protocol.HTTP({
      url:␣json_url,
      format:␣new␣OpenLayers.Format.GeoJSON()
      })
      });
      
      //␣Add␣our␣vector␣layer␣to␣the␣map
      map.addLayer(json_layer);
      

      Siehe auch OpenLayers.Strategy: Strategies deal with when to make requests for data (or when to send modifications). Strategies can also determine how to prepare features before they end up in a layer.

      Hab's aber selbst nicht ausprobiert...

      Gruß,
      mmd


    • Re: 3 Frage OpenLayers - Extend und geojson einbinden · mmd (Gast) · 05.05.2012 18:29 · [flux]

      Jetzt auch erfolgreich getestet mit lokaler Kopie:

      var␣vector_layer␣=␣new␣OpenLayers.Layer.Vector("Strassen␣und␣Wege",␣{
      style:␣{
      strokeColor:␣"blue",
      strokeWidth:␣3,
      cursor:␣"pointer"
      },
      strategies:␣[new␣OpenLayers.Strategy.Fixed()],
      projection:␣new␣OpenLayers.Projection("EPSG:4326"),
      protocol:␣new␣OpenLayers.Protocol.HTTP({
      url:␣"schrebergarten.json",
      format:␣new␣OpenLayers.Format.GeoJSON()
      })
      });
      
      map.addLayer(vector_layer);
      

    • Re: 3 Frage OpenLayers - Extend und geojson einbinden · Lübeck (Gast) · 06.05.2012 10:08 · [flux]

      hi !

      jetzt funktioniert es !

      http://osm.tappenbeck.net/sandbox/schre … 20506a.htm

      Jetzt habe ich nur noch das Problem, dass auf meinem Laptop nichts angezeigt wird.

      Ist für das Protokoll oder ähnliches noch ein xamp erforderlich oder was könnte die Ursaches sein. Eine Idee ?

      Xamp oder vergleichbar !!! Frage erledigt!

      Gruß Jan :-)


    • Re: 3 Frage OpenLayers - Extend und geojson einbinden · Lübeck (Gast) · 07.05.2012 18:04 · [flux]

      hi !

      aber weiter gebastelt und wollte nun nochmal filtern nach dem Straßennamen (nur Bachstelzenweg ist verfügbar!).

      Der Filtercode stammt aus http://osgeo-org.1560.n6.nabble.com/sea … 01407.html

      Es passiert aber nichts .... !

      Kann einer nochmal schauen bei http://osm.tappenbeck.net/sandbox/schre … 120507.htm

      Gruß Jan :-)


    • Re: 3 Frage OpenLayers - Extend und geojson einbinden · mmd (Gast) · 07.05.2012 19:34 · [flux]

      Hi,

      evtl. hilft das Beispiel hier weiter, dort wird wieder die Strategy angepasst:

      ...
      filter␣=␣new␣OpenLayers.Filter.Comparison({
      type:␣OpenLayers.Filter.Comparison.BETWEEN,
      property:␣"when",
      lowerBoundary:␣startDate,
      upperBoundary:␣new␣Date(startDate.getTime()␣+␣(parseInt(spanEl.value,␣10)␣*␣1000))
      });
      
      filterStrategy␣=␣new␣OpenLayers.Strategy.Filter({filter:␣filter});
      
      var␣flights␣=␣new␣OpenLayers.Layer.Vector("Aircraft␣Locations",␣{
      projection:␣geographic,
      strategies:␣[new␣OpenLayers.Strategy.Fixed(),␣filterStrategy],
      ...
      

      Gruß,
      mmd


    • Re: 3 Frage OpenLayers - Extend und geojson einbinden · Lübeck (Gast) · 16.05.2012 13:28 · [flux]

      hi !

      jetzt bin ich wieder im Lande und kann mich dem Thema etwas intensiver widmen.

      Ich habe mir das Beispiel angeschaut - aber irgendwie komme ich da einfach nicht weiter. Mir ist die Umgebungsituation zu komplex.

      Kann mir einer etwas mehr den Weg in richtige Richtung weisen ?

      Gruß Jan .-)