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); ;
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…
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.
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.
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.
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.
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…
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.
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).