x

Problem beim einbinden eines WMS-Dienstes in OpenLayers


  1. Problem beim einbinden eines WMS-Dienstes in OpenLayers · krisch78 (Gast) · 13.12.2012 08:25 · [flux]

    Hallo,

    ich möchte folgende WMS in OpenLayers darstellen: http://gis2.goettingen.de/ArcGIS/servic … /WMSServer?
    Dieser WMS bietet 3 Layer an: 10000er.tif, STK20graulight.tif, STK20farbigblank.tif
    Die Ausdehnung ist: 9.80, 51.48, 10.05, 51,61
    EPSG: 4326

    Ich muss an dieser Stelle zugegeben, dass ich absoluter Anfänger auf dem Gebiet OpenLayers bin. Vielleicht könnt ihr mich ja weiterhelfen.

    Hier also mein Quelltext-Versuche:

    1.: Hier bleibt die Karte weiß!
    <html>
    <head>
    <title>Hallo WMS mit OpenLayers</title>
    <script type="text/javascript" src="../OpenLayers-2.8/OpenLayers.js"></script>
    <script type="text/javascript">
    var map;
    function init() {
    map = new OpenLayers.Map('map');
    var myWmsLayer = new OpenLayers.Layer.WMS(
    'WMS-Beispiel',
    'http://gis2.goettingen.de/ArcGIS/services/Tageblatt/MapServer/WMSServer?',
    {
    layers: 'STK20graulight.tif',
    format: 'image/gif'
    },
    {
    singleTile : true
    }
    );
    map.addLayer(myWmsLayer);
    map.setCenter(new OpenLayers.LonLat(9.9, 51.5), 2);
    map.addControl(new OpenLayers.Control.LayerSwitcher());
    }
    </script>
    </head>
    <body onload="init();">
    <h1>Hallo WMS mit OpenLayers</h1>
    <div id="map" style="width:1024px; height:512px; border:3px solid #000"></div>
    </body>
    </html>

    2.: Hier ist die Karte Pink-gekachelt:

    <html>
    <head>
    <title>Hallo Welt mit OpenLayers</title>
    <script src="http://openlayers.org/api/OpenLayers.js"></script>
    </head>
    <body>
    <h1>Hallo Welt mit OpenLayers</h1>
    <div
    id="map"
    style="width:1024px; height:512px; border:3px solid #000">
    </div>
    <script defer="defer" type="text/javascript">
    var map = new OpenLayers.Map( 'map' );
    var wms = new OpenLayers.Layer.WMS(
    "OpenLayers WMS",
    "http://gis2.goettingen.de/ArcGIS/services/Tageblatt/MapServer/WMSServer?",
    { layers: 'STK20graulight.tif' }
    );
    map.addLayer( wms );
    map.zoomToMaxExtent();
    </script>
    </body>
    </html>

    Vielleicht hat ja auch jemand von euch ein PDF-Tutorial, wenns geht auf deutsch.
    Eine andere Frage noch wisst Ihr ob man auch die ArcGIS-Server10 Rest-Schnittstelle mit OpenLayers anzapfen kann?

    Vielen Dank schonmal im Voraus...

    Grüße

    Krisch


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · wambacher (Gast) · 13.12.2012 11:33 · [flux]

      krisch78 wrote:

      Hallo,

      Ich möchte folgende WMS in OpenLayers darstellen: http://gis2.goettingen.de/ArcGIS/servic … /WMSServer?
      Dieser WMS bietet 3 Layer an: 10000er.tif, STK20graulight.tif, STK20farbigblank.tif

      Dann lies dir bitte erst einmal das hier durch: http://stadtplan.goettingen.de/nutzung.html

      insbesonders die beiden ersten Abschnitte:

      -␣Sämtliche␣Ausführungen␣des␣Amtlichen␣Stadtplanes␣(incl.␣Luftbilder)␣sind␣urheberrechtlich␣geschützt.
      Die␣Rechte␣liegen␣bei␣der␣Stadt␣Göttingen.
      -␣Eine␣vollständige,␣teilweise␣oder␣auszugsweise␣Verwendung␣der␣elektronischen␣Verzeichnisse,
      Karten␣und␣Bilder␣für␣Nutzungen␣in␣jeder␣Art␣und␣jeder␣medialen␣Form␣(in␣Printform,␣digital,␣auf␣CD-ROM␣etc.)
      ist␣nur␣mit␣vorheriger␣Genehmigung␣der␣Stadt␣Göttingen␣zulässig.
      

      Du solltest diese Fragen vorher mit der Stadt klären, sonst hast du irgendwann noch ganz andere Probleme.

      Gruss
      walter


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · krisch78 (Gast) · 13.12.2012 12:08 · [flux]

      Hallo Walter,

      damit gibt es keine Probleme. Das ist alles offiziell.
      Hast du auch eine fachliche Antwort für mich?

      Gruß Krisch


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · Mondschein (Gast) · 13.12.2012 12:13 · [flux]

      krisch78 wrote:

      damit gibt es keine Probleme. Das ist alles offiziell.

      Das sollte man immer erwähnen, denn sonst kommen in diesem Forum mit sehr hoher Wahrscheinlichkeit entsprechende Hinweise.
      Das hat bei uns Tradition. 😉

      Gruß,
      Mondschein


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · maxbe (Gast) · 13.12.2012 14:44 · [flux]

      Tag,

      rosa Kacheln sollte man sich immer ansehen (URL kopieren und in ein Browserfensrt einfügen). Deine rosa Kacheln enthalten den Text "ServiceException code=LayerNotDefined: Parameter layers contains unacceptable layer names", was schon deutlich weiter hilft.

      Das da würde gehen:

      <html>
      <head>
      <title>Hallo␣Welt␣mit␣OpenLayers</title>
      <script␣src="http://openlayers.org/api/OpenLayers.js"></script>
      </head>
      <body>
      <h1>Hallo␣Welt␣mit␣OpenLayers</h1>
      <div
      id="map"
      style="width:1024px;␣height:512px;␣border:3px␣solid␣#000">
      </div>
      <script␣defer="defer"␣type="text/javascript">
      var␣map␣=␣new␣OpenLayers.Map(␣'map',
      {maxExtent:␣new␣OpenLayers.Bounds(9.79736007679923,51.4794681488844,10.0611811756577,51.6130027308795)
      }
      );
      var␣wms␣=␣new␣OpenLayers.Layer.WMS(
      "OpenLayers␣WMS",
      "http://gis2.goettingen.de/ArcGIS/services/Tageblatt/MapServer/WMSServer?",
      {␣layers:␣'1',format:'image/jpeg'}
      );
      map.addLayer(␣wms␣);
      map.zoomToMaxExtent();
      </script>
      </body>
      </html>
      

      Zu Deinem Beispiel hab ich zwei Dinge geändert. (1) den maxExtent eingetragen. Und (2) den Layernamen. Wenn ich mir nämlich die Layer dieses WMS raussuche, steht in den "Title"-Feldern nicht 'STK20graulight.tif' sondern schlicht '1', weswegen ich den Layer "1" lade. ("0" ist Stk20farbigblank.tif, "2" ist 10000er.tif und dann gibts noch einen Layer namens "default").
      "image/jpeg" war nur das erste Format, das mir eingefallen ist. tiff, png, gif wäre auch möglich (steht auch in den oben verlinkten Capabilities).

      Grüße, Max

      PS: Mit OSM wird das aber schwierig, wenn ichs richtig sehe hast Du bei dem GIS die Wahl zwischen Plattkarte (EPSG:4326) und Gauß-Krüger 3 (EPSG:31467)...


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · krisch78 (Gast) · 13.12.2012 15:16 · [flux]

      Vielen Dank,

      maxbe.
      Kann ich nicht auch noch eine Transformation einsetzen um die Darstellung zu entzerren?

      Grüße

      Krisch


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · maxbe (Gast) · 13.12.2012 15:31 · [flux]

      krisch78 wrote:

      Kann ich nicht auch noch eine Transformation einsetzen um die Darstellung zu entzerren?

      Keine Ahnung, aber vielleicht hilft das weiter: http://forum.openstreetmap.org/viewtopi … 99#p234299

      Wenn es Dir nur um eine unverzerrte Ansicht geht, kannst Dich ja auf die Projektion einlassen, die der Server vorgibt und Gauß-Krüger in Openlayers anzeigen:

      .....
      <script␣defer="defer"␣type="text/javascript">
      var␣map␣=␣new␣OpenLayers.Map(␣'map',
      {maxExtent:␣new␣OpenLayers.Bounds(3555389.7671716,5705372.7029728,3573349.38723256,5719999.81951871),
      projection:new␣OpenLayers.Projection("EPSG:31467")
      }
      );
      var␣wms␣=␣new␣OpenLayers.Layer.WMS(
      ....
      

      Zur hübschen Anzeige reicht das. Probleme gibt es später, wenn Du eigene Daten dazu darstellen willst, die müssen dann auch in diesem Koordinatensystem vorliegen...

      Grüße, Max


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · krisch78 (Gast) · 13.12.2012 15:44 · [flux]

      Ah ja,

      nochmals vielen Dank.


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · krisch78 (Gast) · 13.12.2012 16:10 · [flux]

      Maxbe,

      Eine Frage habe doch noch dazu...
      Wie kann ich denn in diesem Fall (ESP:31467) die Koordinaten für eine eingeschränkte Anzeige mit dem Link übergeben?
      ähnlich diesem: "http://www.openstreetmap.org/?lat=47.67 … 8&layers=M"
      Oder geht das dann garnicht?


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · maxbe (Gast) · 13.12.2012 16:30 · [flux]

      krisch78 wrote:

      die Koordinaten für eine eingeschränkte Anzeige mit dem Link übergeben?

      ...
      map.addLayer(␣wms␣);
      map.addControl(new␣OpenLayers.Control.Permalink('permalink'));
      if␣(!map.getCenter()){map.zoomToMaxExtent();}
      </script>
      ...
      

      Du sagst mit "map.zoomToMaxExtent();", dass Du immer alles sehen möchtest. Damit nimmst Du OpenLayers die Chance irgendwas aus den Parametern auszuwerten. Mit "if (!map.getCenter()){...}" wird erst geschaut, ob in der URL was anderes steht. Der Permalink ist immer praktisch, weil der liefert die passenden Parameter.

      Ich würde mir das mit EPSP:31467 aber überlegen. Die Entscheidung jetzt verfolgt Dich, solange Du mit der Karte arbeitest. Besonders wenn Du was mit OSM dazu einbauen willst, stösst Du schnell an Grenzen, weil einfach kein Dienst bei OSM Deine Koordinaten verwendet. Auch OpenLayers ist nur bedingt auf andere Systeme eingerichtet, Du könntest z.B. jetzt nicht so einfach einen GPX-Track in Deine Karte malen oder auch nur eine Koordinate aus der Wikipedia rauskopieren und per URL übergeben (der Bahnhof liegt z.B. bei deinedomain/karte.html?zoom=6&lat=5711684&lon=3564270 nicht bei lat=51.53677 lon=9.926375)
      Grüße, Max


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · moenk (Gast) · 13.12.2012 16:56 · [flux]

      Moin,

      bastel da grad an so einem Tool das auch WMS darstellt mit OL. Damit konnte ich Deine URL grad sehr schön angucken, auch in 4326, sieht aber eben nicht so dolle aus. Der Source für den WMS-Teil ist hier - https://github.com/moenk/yamcat/blob/master/wms.php - und mit ein wenig Änderungen kannst Du den gern verwenden.

      LG,

      -moenk

      PS: Ich bin zufällig nächste Woche genau in der Gegend.


    • Re: Problem beim einbinden eines WMS-Dienstes in OpenLayers · mblaettermann (Gast) · 14.12.2012 07:04 · [flux]

      Hallo,

      ich empfehle ausdrücklich die Projection Global Mercator in WebMaps zu verwenden. Ist einfach Standard. Google macht das so und auch OSM.

      Um beliebige WMS Quellen zu Global Mercator zu wandeln, empfehle ich die Python Software MapProxy: http://mapproxy.org/

      Hier eine beispielhafte Config:

      services:
      demo:
      tms:
      origin:␣'nw'
      layers:
      -␣name:␣luftbild
      title:␣Luftbild
      sources:␣[cache_luftbild]
      caches:
      cache_luftbild:
      grids:␣[grid_mercator]
      sources:␣[source_luftbild]
      sources:
      source_luftbild:
      type:␣wms
      wms_opts:
      version:␣1.1.1
      supported_srs:␣['EPSG:31467']
      coverage:
      bbox:␣[7.5311279297,␣52.2816018681,␣10.7940673828,␣54.0368124052␣]
      bbox_srs:␣'EPSG:4326'
      http:
      ssl_no_cert_checks:␣true
      req:
      url:␣http://gis2.goettingen.de/ArcGIS/services/Tageblatt/MapServer/WMSServer?
      layers:␣1
      transparent:␣true
      
      grids:
      grid_mercator:
      tile_size:␣[256,256]
      srs:␣EPSG:900913
      align_resolutions_with:␣GLOBAL_MERCATOR
      grid_31467:
      tile_size:␣[256,256]
      srs:␣EPSG:31467
      
      globals:
      ##␣coordinate␣transformation␣options
      srs:
      proj_data_dir:␣/usr/share/proj
      
      ##␣cache␣options
      cache:
      #␣where␣to␣store␣the␣cached␣images
      base_dir:␣'./cache_data'
      #␣where␣to␣store␣lockfiles
      lock_dir:␣'./cache_data/locks'
      #␣request␣x*y␣tiles␣in␣one␣step
      meta_size:␣[2,2]
      #␣add␣a␣buffer␣on␣all␣sides␣(in␣pixel)␣when␣requesting␣new␣images
      meta_buffer:␣80
      
      #␣image/transformation␣options
      image:
      #␣resampling_method:␣nearest
      resampling_method:␣bilinear
      #␣resampling_method:␣bicubic
      jpeg_quality:␣90
      max_shrink_factor:␣4.0
      

      Hier noch weitere Infos: http://mapproxy.org/docs/latest/configu … openlayers

      Das Tool kann man dan mit Apache's Model mod_proxy auf einen Pfad der Website mappen, damit es von "außen" auf Port 80 erreichbar ist.

      Besten Gruß
      M