Geodaten Bayern als WMS in OSM

Hallo,
in Bayern sind ja Luftbilder vom Vernessungsamt als wms Dienste freigegeben.
Kann ich diese Karten nicht als wms Layer nutzen?
Ich habe das so probiert, bekomme aber keine Anzeige.
Wer kann mir sagen wo ich weitere Infos bekomme, oder auch wie das geht?
Danke!


map.setCenter(new OpenLayers.LonLat(9.3244,49.726).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")), 10);
wms = new OpenLayers.Layer.WMS("Bayern Luftbilder", "http://geodaten.bayern.de/ogc/ogc_dop200_oa.cgi?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=adv_dop200c&"); map.addLayer(wms); ;

Projektion beachten !

Amtliche Daten dürfte es kaum in 900913 geben

Amtliche Vermessungsdaten gibt es gewöhnlich in Gauss-Kruger, ETRS89 und WGS84

Die 2m-Luftbilder hab ich hier mal ausprobiert. Allerdings hab ich das wohl nur in EPSG 4326 hinbekommen (steht hier als eine der möglichen Projektionen), das ist ein bisschen ungünstig wenn mans z.B. mit der OSM-Mapnik-Karte mischen will…

Grüße, Max

Hallo,
danke erstmal für die Antworten.

Hier auf http://www.vermessung.bayern.de/opendata steht ja auch was von Projektionen, ich müsste mir wohl einmal genauer anschauen, was es damit auf sich hat.
Ist es denn möglich, diese Luftbilder und OSM als Layer dazustellen, oder müsste das in einem freien GIS System gehen?
Ich habe doch auch schon Karten mit Bing oder Google Luftaufnahmen gesehen.

So, jetzt habe ich es einmal ausprobiert, wie hierauf dieser Seite:
http://cartopol.com/example/qgis-osm-border/

Mit den Bremer Layern klappt das auch bei mir, aber mit den Bayern Luftbildern nicht, da kommt nur eine weiße Fläche.
siehe www.mittenimbild.de/test
Kann mir jemand sagen warum das nicht funktioniert?
Danke

<script type="text/javascript">

		//projection: new OpenLayers.Projection("EPSG:900913"),
        //displayProjection: new OpenLayers.Projection("EPSG:4326"),

		PROJECTION_4326 = new OpenLayers.Projection("EPSG:4326");
		PROJECTION_MERC = new OpenLayers.Projection("EPSG:900913"); 


	function drawmap() {
    OpenLayers.Lang.setCode('de');
    	map = new OpenLayers.Map('map', {
       
		    controls: [
			new OpenLayers.Control.Navigation(),
			new OpenLayers.Control.MousePosition(),
			new OpenLayers.Control.Permalink(),
			new OpenLayers.Control.LoadStatus({html: '<img src="./img/loader.gif" /><br />Loading...'}),
			new OpenLayers.Control.PanZoomBar( {id:'myZoomBar', zoomStopHeight:5}),
			new OpenLayers.Control.Attribution(),
			new OpenLayers.Control.LayerSwitcher(),
			new OpenLayers.Control.ScaleLine()],
			maxExtent : new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
			numZoomLevels : 18,
			maxResolution : 156543,
			units : 'm', 
			projection : PROJECTION_MERC,
			displayProjection : PROJECTION_4326 
			});
			
			
			//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
			//Zoombar Skript und Loadstatus by netzwolf.info
			//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
			
			
			//----------------------------------------------------------------------------
			//	Kartenlayer 
			//----------------------------------------------------------------------------
						
			map.addLayer (new OpenLayers.Layer.OSM.Mapnik("Basiskarte"));
			map.addLayer (new OpenLayers.Layer.OSM.CycleMap("CycleMap"));
            		
			//map.setCenter(new OpenLayers.LonLat(9.3244,49.726).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")), 10);

			var center = new OpenLayers.LonLat(9.3244,49.726);
			var centerAsMerc = center.transform(PROJECTION_4326, PROJECTION_MERC);
			map.setCenter(centerAsMerc, 10); 

			wms = new OpenLayers.Layer.WMS("Bayern Luftbilder", "http://geodaten.bayern.de/ogc/ogc_dop200_oa.cgi?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=adv_dop200c&");
			map.addLayer(wms);
						
			baylayer = new OpenLayers.Layer.WMS("Digitales Orthophoto","http://geodaten.bayern.de/ogc/ogc_dop200_oa.cgi?",{layers:'adv_dop200c',format:'image/jpeg'},
			{minzoomlevel:15, numZoomLevels:18, attribution: "<font color=white><b>Luftbilder vom </b></font><a href=\"http://www.gdi.bayern.de/Dokumente/Nutzungsbedingungen_allgemein.html\" target=\"_blank\"><font color=white><b>Web Map Service der Bayerischen Vermessungsverwaltung</b></font></a>"});
			map.addLayer(baylayer); 

Da müsste auf dem Webserver eine Software laufen, die sich die Bilder vom Server der Vermessungsverwaltung abholt, umprojiziert und dann weitergibt. Sowas gibts, UMN-Mapserver soll das z.B. können, aber so einfach Einbinden mit Javascript geht das nicht.

EPSG 900913 (oder “spherical Mercator”, “EPSG 3857”) ist eine Projektion, die speziell für eher einfache Anwendungen in WEB-Kartenservern verwendet wird und zum leichteren Rechnen z.B. davon ausgeht, dass die Welt eine Kugel ist. Google, Bing und OSM kommen damit gut zurecht. Vermessungsämter wollen gerne exakter arbeiten und neuere Erkenntnisse über die Abplattung der Erde an den Polen mit berücksichtigen. Deshalb mögen die 900913 nicht so sehr und bieten es auch nicht gerne an.

Schau Dir mal die URL einer einzelne Kachelan. Da steht irgendwo “SRS=EPSG%3A900913” drin. Das heisst, Du verlangst vom WMS-Server, dass er 900913-Bilder liefern soll. Bremen tut das, Bayern nicht.

Grüße, Max

Sicher?
Denn JOSM macht das nämlich:
Man hat als Projektion “Merkator EPSG:3857” eingestellt und dann holt sich JOSM das bay. Luftbild mit EPSG: 4326
und stellt es z. B. mit der Mapnikkarte zusammen beide als Hintergrund da.

Ziemlich… Aber jetzt bin ich unsicher… :wink:

JOSM kann intern umprojizieren, wenn ich z.B. 4326 einstelle, holt sich der die 900913-Kachel von OSM und staucht die zurecht. Das gleiche kann er auch mit den Luftbildern. Umgekehrt kann ich auch mit den bayerischen Luftbildern im Hintergrund in Mercatorprojektion editieren.

Das kann JOSM.
mkrebs will das aber in eine Webseite einbinden, wenn ichs richtig verstanden hab. Dann muss er das Stauchen und Zerren mit Openlayers oder einer ähnlichen API erledigen. Ich bin mir recht sicher, dass OL das nicht kann, ich denke die anderen APIs machen das auch nicht.

Grüße, Max

Mmmh,

Ob das jetzt nur für einzelen Punkte statt Bilder gedacht ist, keine Ahnung :slight_smile:

Hmmmm, kann ich das denn irgendwie ausprobieren?

In dieser Demo (baut wohl auf diesem Beitrag auf) hat jemand mit proj4js sowas wie gdalwarp für Javascript und html5 nachgebaut, um Rasterbilder umzurechnen. Bei mir läuft das nicht, aber vielleicht bei Dir. Zumindest wäre das ein Ansatzpunkt zum weiterforschen…

:frowning:

Danke, aber ich probiers mal mit den Google Luftbildern… :wink:
Das sollte einfacher sein.

Wie jetzt, g**gle???
Und dabei haben maxbe und meine Wenigkeit sich soviel Mühe beim Mit-Suchen gemacht :frowning:

Meine Links da oben waren wirklich eher zur Abschreckung gedacht. Ich halts für echt schwierig.

Wenn ich sowas haben wollte, würde ich entweder irgendwie die Luftbilder umprojizieren, oder die OSM-Daten in eine amtskonforme Projektion bringen UTM z.B. (Vorsichtig klicken, ist ne Geduldsprobe). Auf jeden Fall würde ich das serverseitig lösen, bevor ich mich mit den Wunderlichkeiten des JavaScripts und OL beschäftige.

Grüße, Max

“Serverseitig” ist so Neunzigerjahremaessig. Neue Ideen braucht das Land! :smiley:

Wenn mir mal jemand vor 10 Jahren erzählt hätte, dass man Echtzeit-Raytracing per Javascript im Browser laufen lassen kann …

Hab mich vertippt. Ich meinte natürlich, dass ich das in der Cloud berechnen lasse :wink:

Den gdalwarp.js basierten Ansatz hat jemand in diesem Posting auch schon einmal vergeblich probiert und berichtet von schlechter Antwortzeit und Browserabstürzen. Bleibt wohl eher die Nicht-Client Lösung, z.B. im gleichen Post die Reprojektion mit MapProxy. Scheint wohl ‘out-of-the-box’ zu funktionieren. Hier mal meine mapproxy.yaml (Achtung: bbox ist ein ziemlich übler Hack, auch fehlt der global-Abschnitt).


services:
  demo:
  kml:
  tms:
  wms:
    srs: ['EPSG:4326', 'EPSG:900913']
    image_formats: ['image/jpeg','image/png']
    md:
      title: Bayern 2m DOP
      abstract: Bayern 2m DOP

layers:
  - Bay2m:
      title: Bayern 2m DOP
      sources: [bayern2m_cache]

caches:
  bayern2m_cache:
    grids: [EPSG_4326_World,EPSG_900913_World]
    sources: [bayern2m_wms]
    link_single_color_images: true
    minimize_meta_requests: true

sources:
  bayern2m_wms:
    type: wms
    supported_srs: ['EPSG:4326']
    req:
      url: http://geodaten.bayern.de/ogc/ogc_dop200_oa.cgi?
      layers: adv_dop200c

grids:
  EPSG_4326_World:
    base: GLOBAL_GEODETIC
    srs: 'EPSG:4326'
    bbox: [8.89292,47.0828,13.9782,50.6269]
    bbox_srs: EPSG:4326

  EPSG_900913_World:
    base: GLOBAL_MERCATOR
    srs: 'EPSG:900913'
    bbox: [8.89292,47.0828,13.9782,50.6269]
    bbox_srs: EPSG:4326


Dazu passenden WMS/TMS Javascript Code kann man dann auf http://127.0.0.1:8080 erzeugen lassen und gleich testen. Dazu mapproxy mit

mapproxy-util serve-develop ./mapproxy.yaml

starten.

Würden die Nutzungsbedingungen des WMS-Services dieses Szenario abdecken?

Edit: Ah, sehe gerade, dass das Beispiel genau anders herum funktioniert und die OSM Karte auf dem Server reprojeziert…