DE:OSM in Website für Gemeinde/js
Übersicht | HTML-Datei | JS-Funktionen | Straßenliste | CSS-Datei | GPX-Dateien | Testanwendung | ToDo-Liste | OL-Bausteine |
Die JavaScript-Funktionen erzeugen den Kartenausschnitt, setzen die Marker, stellen die Routen dar, sorgen für die Einbindung der Nominatim-Suche, erstellen die Straßenliste etc.
Die Datei translations.js ist dazu da, die Objekttypen der Nominatim-Suchergebnisse ins Deutsche zu übersetzen. Sie enthält also nur die entsprechenden Übersetzungen.
JavaScript-Funktionen
function createMap()
{
var startLat = 49.61;
var startLon = 11.3363;
var startZoom = 12;
wgs84 = new OpenLayers.Projection("EPSG:4326");
OpenLayers.Lang.setCode('de');
map = new OpenLayers.Map('mapFrame',
{
controls: [],
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: wgs84,
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34, 20037508.34, 20037508.34),
numZoomLevels: 19,
maxResolution: 156543,
units: 'meters'
});
map.addControl(new OpenLayers.Control.PanZoomBar());
map.addControl(new OpenLayers.Control.ScaleLine());
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.Permalink());
map.addControl(new OpenLayers.Control.Navigation());
map.addControl(new OpenLayers.Control.MouseDefaults());
var mapnikMap = new OpenLayers.Layer.OSM.Mapnik("Mapnik",
{
transitionEffect: 'resize'
});
var osmarenderMap = new OpenLayers.Layer.OSM.Osmarender("Osmarender",
{
transitionEffect: 'resize'
});
var cycleMap = new OpenLayers.Layer.OSM.CycleMap("Radkarte",
{
transitionEffect: 'resize'
});
map.addLayers([mapnikMap, osmarenderMap, cycleMap]);
var styleGrenze = {strokeColor: "#00FF00", strokeWidth: 2, fillColor: "#00FF00", pointRadius: 5};
var styleWander = {strokeColor: "#0000FF", strokeWidth: 2, fillColor: "#0000FF", pointRadius: 5};
var pois = new OpenLayers.Layer.Text("--", { location:"./textfile.txt", projection: new OpenLayers.Projection("EPSG:4326")} );
map.addLayer(pois);
pois.setVisibility(false);
var lGrenzeGpx = new OpenLayers.Layer.Vector("Grenze Simmelsdorf",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/Simmelsdorf Grenze.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleGrenze,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lGrenzeGpx);
lGrenzeGpx.setVisibility(true);
var lGrenzKGpx = new OpenLayers.Layer.Vector("Grenze Landkreis",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/Landkreis-Nuernberg-Land.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleGrenze,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lGrenzKGpx);
lGrenzKGpx.setVisibility(false);
var lGrenzLGpx = new OpenLayers.Layer.Vector("Grenze Lauf",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/Lauf GrenzeUmriss.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleGrenze,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lGrenzLGpx);
lGrenzLGpx.setVisibility(false);
var lWanderGpx = new OpenLayers.Layer.Vector("Tucher Mausoleum, 1 Std.",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/WW Tucher-Mausoleum.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lWanderGpx);
lWanderGpx.setVisibility(false);
var lEibenGpx = new OpenLayers.Layer.Vector("Eibengrat, 2 Std.",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/WW Eibengrat.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lEibenGpx);
lEibenGpx.setVisibility(false);
var lHuttRuGpx = new OpenLayers.Layer.Vector("Hüttenbacher Rundweg, 4½ Std.",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/WW Huttenbacher Rundweg.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lHuttRuGpx);
lHuttRuGpx.setVisibility(false);
var lFrankenGpx = new OpenLayers.Layer.Vector("Frankenweg",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/WW Frankenweg2.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lFrankenGpx);
lFrankenGpx.setVisibility(false);
var lArchaeGpx = new OpenLayers.Layer.Vector("Archäologischer WW, 2 Std.",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/WW Archaeologischer Wanderweg.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lArchaeGpx);
lArchaeGpx.setVisibility(false);
var l1gelbGpx = new OpenLayers.Layer.Vector("1 gelb, 6 Std.",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/WW 1 gelb.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(l1gelbGpx);
l1gelbGpx.setVisibility(false);
var l3gruenGpx = new OpenLayers.Layer.Vector("3 grün, 1 Std.",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/WW 3 gruen.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(l3gruenGpx);
l3gruenGpx.setVisibility(false);
var lS4blauGpx = new OpenLayers.Layer.Vector("Osternohe-Hohenstein, 3 Std.",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/WW Schnaittach 4 blau.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lS4blauGpx);
lS4blauGpx.setVisibility(false);
var lTucherstGpx = new OpenLayers.Layer.Vector("Tuchersteig, 5 Std.",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/WW Tucher-Steig.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lTucherstGpx);
lTucherstGpx.setVisibility(false);
var lSehensGpx = new OpenLayers.Layer.Vector("Sehenswürdigkeiten",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/Sehens.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lSehensGpx);
lSehensGpx.setVisibility(false);
var lSitzbaGpx = new OpenLayers.Layer.Vector("Sitzbänke",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/Sitzbank.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lSitzbaGpx);
lSitzbaGpx.setVisibility(false);
var lInfotaGpx = new OpenLayers.Layer.Vector("Wandertafeln",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/Wandertafeln.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lInfotaGpx);
lInfotaGpx.setVisibility(false);
var lEssenGpx = new OpenLayers.Layer.Vector("Essen und Trinken",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/Essen.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lEssenGpx);
lEssenGpx.setVisibility(false);
var lFraGebGpx = new OpenLayers.Layer.Vector("Fränkischer Gebirgsweg",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/WW Fraenkischer-Gebirgsweg.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(lFraGebGpx);
lFraGebGpx.setVisibility(false);
var layerRathaus = new OpenLayers.Layer.Vector("Rathaus Simmelsdorf",{
protocol: new OpenLayers.Protocol.HTTP
({
url: "../osm/Rathaus.gpx",
format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})
}),
strategies: [new OpenLayers.Strategy.Fixed()],
style: styleWander,
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayer(layerRathaus);
layerRathaus.setVisibility(true);
/*
var hills = new OpenLayers.Layer.OSM("Relief", "http://topo.geofabrik.de/relief/${z}/${x}/${y}.png",{minZoomLevel: 8, maxZoomLevel: 15 , isBaseLayer:true, transitionEffect:null, attribution: "DEM by <a href='http://srtm.csi.cgiar.org'>CIAT</a>"});
map.addLayer(hills);
var trails = new OpenLayers.Layer.OSM("Reit- und Wanderwege", "http://topo.geofabrik.de/trails/${z}/${x}/${y}.png",{minZoomLevel: 8, maxZoomLevel: 15 , isBaseLayer:false, transitionEffect:null, attribution: "Data by <a href='http://openstreetmap.org/'>OSM</a>"});
map.addLayer(trails);
//map.addLayer(lRathaus);
//lRathaus.setVisibility(true);
//layer_gsat = new OpenLayers.Layer.Google("Google Sat", { type: G_SATELLITE_MAP, 'sphericalMercator': true, numZoomLevels:19 } );
//map.addLayer(layer_gsat);
*/
var selcontrol = new OpenLayers.Control.SelectFeature([lGrenzeGpx, lGrenzKGpx, lGrenzLGpx, lWanderGpx, lEibenGpx, lHuttRuGpx, lFrankenGpx, lArchaeGpx, l1gelbGpx, l3gruenGpx, lS4blauGpx, lTucherstGpx, lSehensGpx, lSitzbaGpx, lInfotaGpx, lEssenGpx, lFraGebGpx, layerRathaus],
{
onSelect: createPopup,
onUnselect: destroyPopup,
toggle: true,
clickout: true
});
map.addControl(selcontrol);
selcontrol.activate();
if(!map.getCenter())
{
// jump to given start position
var startPosition = new OpenLayers.LonLat(startLon, startLat).transform(wgs84, map.getProjectionObject());
map.setCenter(startPosition, startZoom);
}
initEnter();
document.getElementById('searchBox').focus();
}
function initEnter(event)
{
if (!event)
event = window.event;
if(navigator.appName == "Microsoft Internet Explorer")
{
if(event.keyCode == 13)
{
requestSearch();
}
}
else
{
document.captureEvents(Event.KEYPRESS);
document.onkeypress = keyPressed;
}
}
function keyPressed(key)
{
if (key.which == "13")
{
requestSearch();
}
}
function translateType(placeType)
{
var translatedType = searchTypesDE[placeType];
if(typeof translatedType=='undefined')
return "";
else
translatedType += " ";
return translatedType;
}
function requestSearch()
{
document.getElementById('mapFrame').style.top = '175px';
document.getElementById('resultList').style.height = '100px';
var placesList;
document.getElementById('resultList').innerHTML = "<b>Laden...</b>";
var searchString = document.getElementById('searchBox').value;
if (searchString.length == 0)
document.getElementById('resultList').innerHTML = "<b>Leere Eingabe.<br />Nichts gefunden.</b>";
else
{
searchString += ", simmelsdorf";
searchString = searchString.replace(/ /g, "+");
var searchUrl = "http://nominatim.openstreetmap.org/search?format=xml&polygon=0&addressdetails=0&q="+searchString;
var searchRequest = OpenLayers.Request.GET(
{
url: searchUrl,
async: false
});
document.getElementById('resultList').innerHTML = searchRequest.responseText;
placesList = searchRequest.responseXML.getElementsByTagName('place');
if (placesList.length > 0)
{
document.getElementById('resultList').innerHTML = "<br />";
for (var i = 0; i < placesList.length; i++)
{
var place = placesList[i];
var placeBoundingbox = place.getAttribute('boundingbox');
var placeKey = place.getAttribute('class');
var placeValue = place.getAttribute('type');
var placeName = place.getAttribute('display_name');
var placeId = place.getAttribute('osm_id');
var placeLat = place.getAttribute('lat');
var placeLon = place.getAttribute('lon');
var placeType = placeKey+"="+placeValue;
placeType = translateType(placeType);
var placeBounds = placeBoundingbox.split(",");
placeName = placeName.replace(", Nürnberger Land, 91245, Regierungsbezirk Mittelfranken, Freistaat Bayern, Bundesrepublik Deutschland", "");
placeName = placeName.replace(", Nürnberger Land, Regierungsbezirk Mittelfranken, Freistaat Bayern, Bundesrepublik Deutschland", "");
var placeItem = "<b>"+placeType+"</b><a href=\"javascript:showPlace("+placeBounds[2]+","+placeBounds[0]+","+placeBounds[3]+","+placeBounds[1]+","+placeId+","+placeLat+","+placeLon+");\">"+placeName+"</a><br /><br />";
document.getElementById('resultList').innerHTML += placeItem;
}
}
else
document.getElementById('resultList').innerHTML = "<b>Nichts gefunden.</b>";
}
}
function showPlace(left, bottom, right, top, id, lat, lon)
{
document.getElementById('mapFrame').style.top = '75px';
document.getElementById('resultList').style.height = '0px';
var bounds = new OpenLayers.Bounds(left, bottom, right, top).transform(wgs84, map.getProjectionObject());
map.zoomToExtent(bounds, true);
}
function addMarker(layer, lon, lat, popupContentHTML)
{
var ll = new OpenLayers.LonLat(lon, lat).transform(wgs84, map.getProjectionObject());
var feature = new OpenLayers.Feature(layer, ll);
feature.closeBox = true;
feature.popupClass = OpenLayers.Class(OpenLayers.Popup.FramedCloud, {minSize: new OpenLayers.Size(300, 180) } );
feature.data.popupContentHTML = popupContentHTML;
feature.data.overflow = "hidden";
var marker = feature.createMarker();
var markerClick = function(evt)
{
if (this.popup == null)
{
this.popup = this.createPopup(this.closeBox);
map.addPopup(this.popup);
this.popup.show();
}
else
{
this.popup.toggle();
}
OpenLayers.Event.stop(evt);
};
marker.events.register("mousedown", feature, markerClick);
layer.addMarker(marker);
}
function createPopup(feature)
{
var lonlat = feature.geometry.getBounds().getCenterLonLat().clone();
lonlat.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
feature.popup = new OpenLayers.Popup.FramedCloud
(
"gpx",
feature.geometry.getBounds().getCenterLonLat(),
null,
"<b id=\"popupTitle\">"+feature.attributes.name+"</b><p id=\"popupContent\">"+feature.attributes.desc+"</p>",
null,
true
);
map.addPopup(feature.popup);
}
function destroyPopup(feature)
{
feature.popup.destroy();
feature.popup = null;
}
function showPosition(position)
{
var coordinate = position.split(";");
var position = new OpenLayers.LonLat(coordinate[0], coordinate[1]).transform(wgs84, map.getProjectionObject());
map.setCenter(position, 17);
}
Die translations.js ist der Einfachheit halber nicht hier aufgeführt, sondern kann einfach heruntergeladen werden.
Herunterladen
Hier kannst du die functions.js herunterladen, sowie die translations.js.
Kopieren
- kopiere den gesamten Code. Achte darauf, dass du auch das erste und letzte Zeichen kopiert hast.
- füge den Code im Texteditor in eine neue Seite ein
- speichere den Code unter dem Dateinamen "functions.js"
- lade die translations.js herunter und speichere sie unter diesem Namen ab
- lade die Dateien mit dem FTP-Programm auf den Webserver in den passenden Ordner
Falls du einen anderen Ordner- oder Dateinamen wählst, passe die HTML-Datei entsprechend an.
Kartenmitte und Zoomstufe definieren
var startLat = 49.61; var startLon = 11.3363; var startZoom = 12;
Die Koordinaten für die gewünschte Kartenmitte und der Wert für die Zoomstufe sind entsprechend anzupassen.
Layer definieren
var lEibenGpx = new OpenLayers.Layer.Vector("Eibengrat, 2 Std.",{protocol: new OpenLayers.Protocol.HTTP({url: "../osm/WW Eibengrat.gpx",format: new OpenLayers.Format.GPX({extractWaypoints: true, extractAttributes: true})}),strategies: [new OpenLayers.Strategy.Fixed()],style: styleWander ,projection: new OpenLayers.Projection("EPSG:4326")}); map.addLayer(lEibenGpx); lEibenGpx.setVisibility(false);
Die Werte für den anzuzeigenden Layer-Namen und die GPX-Datei sind entsprechend anzupassen.
Der Style bzw. das Aussehen von Symbolen, Markern und Linien wird hier bestimmt, indem ein bestimmter Style angegeben wird, der weiter oben definiert ist, z.B. so:
var styleWander = {strokeColor: "#0000FF", strokeWidth: 2, fillColor: "#0000FF", pointRadius: 5};
Hier wird als Linienstärke, Linienfarbe, Punktradius und Punktfarbe festgelegt.
Layer und Marker aufrufen
map.addLayers([layer_mapnik, GPX-Variable, layer_markers]);
Damit ein Layer angezeigt wird, muss man ihn wie oben einbinden.
Marker einzeln einbinden
Muss noch erprobt werden, daher entweder selbst entwickeln oder per Umweg über neuen GPX-Layer.