<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Wikipedia on OpenStreetMap</title>
<style type="text/css">
body {
padding: 0;
margin: 0;
}
.olControlAttribution
{
bottom: 5px !important;
right: 80px !important;
}
.olControlPermalink {
bottom: 5px !important;
right: 5px !important;
width: 60px;
text-align: center;
}
.olControlAttribution, .olControlPermalink {
background-color: white;
border-color: black;
border-style: solid;
border-width: 1px;
cursor: pointer;
padding: 2px 4px;
opacity: 0.5;
}
.olPopupContent, .olControlAttribution, .olControlPermalink {
font-family: arial, sans-serif;
font-size: 12px;
}
.olControlAttribution:hover, .olControlPermalink:hover {
opacity: 1.0;
}
.olPopupContent a, .olControlAttribution a, .olControlPermalink a {
color: #0645AD;
text-decoration: none;
}
.olPopupContent a:hover, .olControlAttribution a:hover, .olControlPermalink a:hover {
text-decoration: underline;
}
#activetooltip {
background-color: #ffffcb !important;
overflow: hidden;
border: 1px solid #DBDBD3 !important;
font-family: arial, sans-serif;
font-size: 12px;
height: 8px;
text-align: center;
}
#activetooltip .olPopupContent {
padding: 5px 0 0 0 !important;
}
.olPopupContent {
}
</style>
<!--- //position: var zoom = 12;
args.lon = 11.329722222222;
args.lat = 50.979444444444;
--->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="./OpenLayers/OpenLayers-original2-9.js.php"></script>
<script src="http://toolserver.org/~osm/libs/openstreetmap/latest/OpenStreetMap.js"></script>
<script type="text/javascript">
// map object
var map;
var poiLayerHttp;
var pois;
// initiator
function init()
{
var urlRegex = new RegExp('^http://([abc]).www.toolserver.org/tiles/([^/]+)/(.*)$');
// show an error image for missing tiles
OpenLayers.Util.onImageLoadError = function()
{
if(urlRegex.test(this.src))
{
var style = RegExp.$2;
if(style == 'osm')
{
var tile = RegExp.$3;
var inst = RegExp.$1;
this.src = 'http://'+inst+'.tile.openstreetmap.org/'+tile;;
if(console && console.log)
console.log('redirecting request for '+tile+' to openstreetmap.org: '+this.src);
return;
}
this.src = 'http://www.openstreetmap.org/openlayers/img/404.png';
}
};
// get the request-parameters
var args = OpenLayers.Util.getParameters();
// main map object
map = new OpenLayers.Map ("map", {
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.Attribution(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.Permalink(),
new OpenLayers.Control.ScaleLine({geodesic:true})
],
// mercator bounds
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
});
// create the custom layer
OpenLayers.Layer.OSM.Toolserver = OpenLayers.Class(OpenLayers.Layer.OSM, {
initialize: function(name, options) {
var url = [
"http://a.www.toolserver.org/tiles/" + name + "/${z}/${x}/${y}.png",
"http://b.www.toolserver.org/tiles/" + name + "/${z}/${x}/${y}.png",
"http://c.www.toolserver.org/tiles/" + name + "/${z}/${x}/${y}.png"
];
options = OpenLayers.Util.extend({numZoomLevels: 19}, options);
OpenLayers.Layer.OSM.prototype.initialize.apply(this, [name, url, options]);
},
CLASS_NAME: "OpenLayers.Layer.OSM.Toolserver"
});
// add the osm.org layers
var osm = new OpenLayers.Layer.OSM.Toolserver('osm', {
attribution:'map by <a target="_blank" href="http://www.openstreetmap.org/">OpenStreetMap</a> (CC-BY-SA)'});
map.addLayer(osm);
var osmNoLabels = new OpenLayers.Layer.OSM.Toolserver('osm-no-labels');
map.addLayer(osmNoLabels);
map.addLayer(new OpenLayers.Layer.OSM.Mapnik("osm.org mapnik"), {visibility: false});
map.addLayer(new OpenLayers.Layer.OSM.Toolserver('hikebike'));
map.addLayer(new OpenLayers.Layer.OSM.Toolserver('germany'));
var osmLabelsEn = new OpenLayers.Layer.OSM.Toolserver('osm-labels-en', {isBaseLayer: false, visibility: false});
var osmLabelsde = new OpenLayers.Layer.OSM.Toolserver('osm-labels-de', {isBaseLayer: false, visibility: false});
map.addLayers([osmLabelsEn, osmLabelsde]);
var bboxStrategy = new OpenLayers.Strategy.BBOX( {
ratio : 1.1,
resFactor: 1
});
poiLayerHttp = new OpenLayers.Protocol.HTTP({
url: "http://toolserver.org/~kolossos/geoworld/marks.php?",
params: { 'LANG' : 'de', 'thumbs' : '0'},
format: new OpenLayers.Format.KML({
extractStyles: true,
extractAttributes: true
})
});
pois = new OpenLayers.Layer.Vector("Wikipedia World", {
attribution:'<a target="_blank" href="http://de.wikipedia.org/wiki/Wikipedia:WikiProjekt_Georeferenzierung/Wikipedia-World/en">Wikipedia</a> (CC-BY-SA)',
projection: new OpenLayers.Projection("EPSG:4326"),
strategies: [bboxStrategy],
protocol: poiLayerHttp
});
map.addLayer(pois);
var feature = null;
var highlightFeature = null;
var tooltipTimeout = false;
var lastFeature = null;
var selectPopup = null;
var tooltipPopup = null;
var selectCtrl = new OpenLayers.Control.SelectFeature(pois, {
toggle:true,
clickout: true
});
pois.events.on({ "featureselected": onMarkerSelect, "featureunselected": onMarkerUnselect});
map.events.register("zoomend", map, zoomEnd);
function onMarkerSelect (evt) {
eventTooltipOff(evt);
if(selectPopup != null) {
map.removePopup(selectPopup);
selectPopup.feature=null;
if(feature != null && feature.popup != null){
feature.popup = null;
}
}
feature = evt.feature;
//console.log("feature selected", feature) ;
//console.log("features in layer", pois.features.length);
selectPopup = new OpenLayers.Popup.AnchoredBubble("activepopup",
feature.geometry.getBounds().getCenterLonLat(),
new OpenLayers.Size(220,170),
text='<b>'+feature.attributes.name +'</b><br>'+ feature.attributes.description,
null, true, onMarkerPopupClose );
selectPopup.closeOnMove = false;
selectPopup.autoSize = false;
feature.popup = selectPopup;
selectPopup.feature = feature;
map.addPopup(selectPopup);
}
function onMarkerUnselect (evt) {
feature = evt.feature;
if(feature != null && feature.popup != null){
selectPopup.feature = null;
map.removePopup(feature.popup);
feature.popup = null;
}
}
function onMarkerPopupClose(evt) {
if(selectPopup != null) {
map.removePopup(selectPopup);
selectPopup.feature = null;
if(feature != null && feature.popup != null) {
feature.popup = null;
}
}
selectCtrl.unselectAll();
}
var highlightCtrl = new OpenLayers.Control.SelectFeature(pois, {
hover: true,
highlightOnly: true,
renderIntent: "temporary",
eventListeners: {
featurehighlighted: eventTooltipOn,
featureunhighlighted: eventTooltipOff
}
});
function eventTooltipOn (evt) {
highlightFeature = evt.feature;
if(tooltipPopup != null) {
map.removePopup(tooltipPopup);
tooltipPopup.feature=null;
if(lastFeature != null) {
lastFeature.popup = null;
}
}
lastFeature = highlightFeature;
//document.getElementById("map_OpenLayers_Container").style.cursor = "pointer";
tooltipPopup = new OpenLayers.Popup("activetooltip",
highlightFeature.geometry.getBounds().getCenterLonLat(),
new OpenLayers.Size(220,20),
highlightFeature.attributes.name, null, false, null );
if(tooltipTimeout) clearTimeout(tooltipTimeout);
tooltipPopup.closeOnMove = true;
tooltipPopup.autoSize = true;
map.addPopup(tooltipPopup);
}
function eventTooltipOff (evt) {
highlightFeature = evt.feature;
//document.getElementById("map_OpenLayers_Container").style.cursor = "default";
if(tooltipPopup)
{
tooltipTimeout = setTimeout(function() {
map.removePopup(tooltipPopup);
tooltipPopup = null;
}, 500);
}
if(highlightFeature != null && highlightFeature.popup != null){
map.removePopup(highlightFeature.popup);
highlightFeature.popup = null;
tooltipPopup = null;
lastFeature = null;
}
}
function zoomEnd() {
var scale = map.getScale();
if (scale>10000000) {
$(".olControlScaleLine").css('display', 'none');
} else {
$(".olControlScaleLine").css('display', 'block');
}
// below zoom 6 we switch from layer "osm" to layer "osm-no-labels" + "osm-labels-de"
if(map.getZoom() < 6 && map.baseLayer.id == osm.id)
{
map.setBaseLayer(osmNoLabels);
osmLabelsde.setVisibility(true);
}
// above zoom 6 we switch back to the usual osm layer
else if(map.getZoom() >= 6 && map.baseLayer.id == osmNoLabels.id)
{
map.setBaseLayer(osm);
osmLabelsde.setVisibility(false);
}
}
map.addControl(highlightCtrl);
map.addControl(selectCtrl);
highlightCtrl.activate();
selectCtrl.activate();
// default zoon
var zoom = 12;
args.lon = 11.329722222222;
args.lat = 50.979444444444;
// lat/lon requestes
if(args.lon && args.lat)
{
// zoom requested
if(args.zoom)
{
zoom = parseInt(args.zoom);
var maxZoom = map.getNumZoomLevels();
if (zoom >= maxZoom) zoom = maxZoom - 1;
}
// transform center
var center = new OpenLayers.LonLat(parseFloat(args.lon), parseFloat(args.lat)).
transform(map.displayProjection, map.getProjectionObject())
// move to
map.setCenter(center, zoom);
}
// bbox requestet
else if (args.bbox)
{
// transform bbox
var bounds = OpenLayers.Bounds.fromArray(args.bbox).
transform(map.displayProjection, map.getProjectionObject());
// move to
map.zoomToExtent(bounds)
}
// default center
else
{
// set the default center
var center = new OpenLayers.LonLat(0, 0).
transform(map.displayProjection, map.getProjectionObject());
// move to
map.setCenter(center, zoom);
}
var markers = new OpenLayers.Layer.Markers( "Marker", {
attribution:' <a target="_blank" href="http://de.wikipedia.org/wiki/Hilfe:OpenStreetMap"> Help </a> ' } );
map.addLayer(markers);
var size = new OpenLayers.Size(16,16);
var offset = new OpenLayers.Pixel(-(size.w/2), -(size.h/2));
var icon = new OpenLayers.Icon('Ol_icon_red_example.png',size,offset);
markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(map.center.lon,map.center.lat),icon));
map.addLayer(new OpenLayers.Layer.OSM(
'hillshading',
'http://toolserver.org/~cmarqu/hill/${z}/${x}/${y}.png',
{
displayOutsideMaxExtent: true,
isBaseLayer: false,
transparent: true,
visibility: false,
numZoomLevels: 16
}
));
}
function hideInsetMenu() {
$('#mapInsetMenuDropdown').css('visibility', 'hidden');
}
function showInsetMenu() {
$('#mapInsetMenuDropdown').css('visibility', 'visible');
}
$(function() {
$('.menuSelect').change(function() {
if ($(this).attr('checked')==true) {
poiLayerHttp.params[$(this).val()] = 'yes';
} else {
poiLayerHttp.params[$(this).val()] = 'no';
}
pois.redraw(true);
});
});
$(function() {
$('.menuSelectlist').change(function() {
poiLayerHttp.params.LANG = $(this).val();
pois.redraw(true);
});
});
</script>
<style>
.mapBtnOuter {
border: 1px solid #444;
background-color: #fff;
z-index: 2000;
}
.mapBtnInner {
cursor: pointer;
font-size: 12px;
font-family: arial, sans-serif;
border-color:white #bbb #bbb white;
border-style:solid;
border-width:1px;
padding: 2px 4px 2px 4px ;
}
#mapInsetMenu {
position: absolute;
left: 50px;
top: 7px;
}
div.olLayerDiv {
-khtml-user-select: none;
}
.olControlScaleLineBottom {
display: none;
}
#mapInsetMenuDropdown {
visibility: hidden;
padding: 2px 4px 2px 4px ;
font-size: 12px;
font-family: arial, sans-serif;
background-color: #fff;
border-color: #444;
border-style:solid;
border-width:1px;
position: absolute;
left: -1px;
top: 20px;
width: 180px;
box-shadow: 2px 2px 2px #666;
-moz-box-shadow: 2px 2px 2px #666;
}
</style>
</head>
<body onload="init();">
<div id="mapContainer" style="width: 100%; height: 100%">
<div style="width: 100%; height: 100%" id="map">
</div>
<div id="mapInsetMenu" class="mapBtnOuter" onmouseout="javascript:hideInsetMenu()" onmouseover="javascript:showInsetMenu()">
<div id="mapInsetMenuI" class="mapBtnInner">
Options
</div>
<div id="mapInsetMenuDropdown">
<b>Languages</b><br />
<select class="menuSelectlist" name="top5" size="5">
<option value=""> All </option>
<option value="als">Alemannisch</option>
<option value="ar">العربية</option>
<option value="bar">Boarisch</option>
<option value="ca">Català</option>
<option value="cs">Česky</option>
<option value="da">Dansk</option>
<option value="de">Deutsch</option>
<option value="el">Ελληνικά</option>
<option value="en">English</option>
<option value="es">Español</option>
<option value="fi">Suomi</option>
<option value="fr">Français</option>
<option value="hr">Hrvatski</option>
<option value="hsb">Hornjoserbsce</option>
<option value="hu">Magyar</option>
<option value="it">Italiano</option>
<option value="ja">日本語</option>
<option value="ksh">Ripoarisch</option>
<option value="la">Latina</option>
<option value="lb">Lëtzebuergesch</option>
<option value="li">Limburgs</option>
<option value="nds">Plattdüütsch</option>
<option value="nl">Nederlands</option>
<option value="no">Norsk (bokmål)</option>
<option value="pdc">Pennsylvania Dutch</option>
<option value="pl">Polski</option>
<option value="pt">Português</option>
<option value="rm">Rumantsch</option>
<option value="ro">Română</option>
<option value="ru">Русский</option>
<option value="sk">Slovenčina</option>
<option value="sl">Slovenščina</option>
<option value="sq">Shqip</option>
<option value="sr">Српски / Srpski</option>
<option value="stq">Seeltersk</option>
<option value="sv">Svenska</option>
<option value="tr">Türkçe</option>
<option value="uk">Українська</option>
<option value="yi">ייִדיש</option>
<option value="zh">中文</option>
</select>
<p>
<b>Thumbnails</b><br />
<input class="menuSelect" type="checkbox" name="thumbs" value="thumbs"/>
<br>
</div>
</div>
</div>
</body>
</html>