1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>OpenLayers: OSM Layer</title> <link rel="stylesheet" href="../theme/default/style.css" type="text/css" /> <link rel="stylesheet" href="style.css" type="text/css" /> <style> #map { height: 350px; } </style> <script src="../lib/OpenLayers.js"></script> <script type="text/javascript"> var lon = 5; var lat = 40; var zoom = 5; var map, layer, gml; function export_vectors() { var x = new OpenLayers.Format.XML(); var content = x.write(gml.renderer.rendererRoot); $("vectors").value = content; $("vectors").style.display = "block"; $("vectorlink").href = "data:image/svg+xml," + escape(content); $("vectorlink").style.display="block"; } function on_feature_hover(feature) { var text ="<ul>"; var type ="way"; if (feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") { type = "node"; } text += "<li>" + feature.osm_id + ": <a href='http://crschmidt.net/osm/attributes.html?type="+type+"&id="+feature.osm_id+"'>Edit</a>, <a href='http://www.openstreetmap.org/api/0.5/"+type + "/" + feature.osm_id + "'>API</a></li>"; for (var key in feature.attributes) { text += "<li>" + key + ": " + feature.attributes[key] + "</li>"; } text += "</ul>"; $("status").innerHTML = text; } function clear_data() { gml.destroyFeatures(); } function new_data() { if (!check_zoom()) { return; } clear_data(); gml.loaded = false; gml.url = "http://www.openstreetmap.org/api/0.5/map?bbox=" + map.getExtent().toBBOX(); $("status").innerHTML = "Loading more data..."; gml.loadGML(); } function style_osm_feature(feature) { feature.style = OpenLayers.Util.extend({'fill':'black'}, OpenLayers.Feature.Vector.style['default']); if (feature.attributes.highway == "motorway") { feature.style.strokeColor = "blue"; feature.style.strokeWidth = 5; } else if (feature.attributes.highway == "primary") { feature.style.strokeColor = "red"; } else if (feature.attributes.highway == "secondary") { feature.style.strokeColor = "orange"; } else if (feature.attributes.highway) { feature.style.strokeColor = "black"; } } function check_zoom() { var zoom = map.getZoom(); if (zoom >= 11) { return true; } if (zoom >= 9) { return confirm("Loading this amount of data may slow your browser. Are you sure you want to do this?"); } $("status").innerHTML = "Area too large. Zoom in to load data. (Current zoom level: "+ zoom + ". Must be at zoom 9+.)"; return false; } function init(){ OpenLayers.ProxyHost = "proxy.cgi?url="; OpenLayers.Feature.Vector.style['default'].strokeWidth = 4; OpenLayers.Feature.Vector.style['default'].cursor = 'pointer'; map = new OpenLayers.Map('map', {'maxResolution': 360/512/16, 'numZoomLevels':15, controls: [ new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoomBar() ]}); map.addControl(new OpenLayers.Control.LayerSwitcher()); map.addControl(new OpenLayers.Control.Permalink()); layer = new OpenLayers.Layer.WMS( "OSM", [ "http://t1.hypercube.telascience.org/tiles?", "http://t2.hypercube.telascience.org/tiles?", "http://t3.hypercube.telascience.org/tiles?", "http://t4.hypercube.telascience.org/tiles?" ], {layers: 'osm-4326', format: 'image/png' } ); map.addLayer(layer); if (!map.getCenter()) { gml = new OpenLayers.Layer.GML("OSM", "osm/sutton_coldfield.osm", {format: OpenLayers.Format.OSM}); map.zoomToExtent(new OpenLayers.Bounds(-1.819072,52.549034,-1.814341,52.551582)); } else { if (map.getZoom() >= 11) { gml = new OpenLayers.Layer.GML("OSM", "http://www.openstreetmap.org/api/0.5/map?bbox=" + map.getExtent().toBBOX(), {format: OpenLayers.Format.OSM}); } else { gml = new OpenLayers.Layer.GML("OSM", "xml/cambridgeport.osm", {format: OpenLayers.Format.OSM}); } } gml.events.register("loadstart", null, function() { $("status").innerHTML = "Loading..."; }) gml.events.register("loadend", null, function() { $("status").innerHTML = ""; }) map.addLayer(gml); gml.preFeatureInsert = style_osm_feature; var sf = new OpenLayers.Control.SelectFeature(gml, {'onSelect': on_feature_hover}); map.addControl(sf); sf.activate(); } </script> </head> <body onload="init()"> <h1 id="title">Advanced OSM Layer</h1> <div id="map" class="smallmap"></div> <div id="download"> <ul> <li><a href="javascript:new_data();">Download current view</a></li> <li><a href="javascript:clear_data();">Clear current data</a></li> <li><a href="javascript:export_vectors();">Export Vector Data</a></li> </ul> <div id="status">Loading...</div> </div> <a id="vectorlink" href="" style="display:none">Display via data: URL (FF Only)</a> <textarea id="vectors" style="display:none;width:100%" rows="10"></textarea> </body> </html> |