- $("drag_box").onclick = startDrag;
-
- function useMap() {
- var bounds = map.getExtent();
- setBounds(bounds);
- getData(bounds);
- }
- $("use_map").onclick = useMap;
- function dataLoaded() {
- $("status").innerHTML = "Loaded " + this.features.length + " features. (<a href='"+ this.url+"'>API</a>)";
-
- obj_list = document.createElement("ul");
- for (var i = 0; i < this.features.length; i++) {
- var feature = this.features[i];
- var type ="way";
- if (feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
- type = "node";
- }
- var nice_name = type.substr(0,1).toUpperCase() + type.substr(1,type.length);
- var li = document.createElement("li");
- li.appendChild(document.createTextNode(nice_name + " "));
- var link = document.createElement("a");
- link.href = "/browse/"+type+"/"+feature.osm_id;
- var name = feature.attributes.name || feature.osm_id;
- link.appendChild(document.createTextNode(name));
- li.appendChild(link);
- li.appendChild(document.createTextNode(" "));
- var link = document.createElement("a");
- link.href = "#";
- link.appendChild(document.createTextNode("+"));
- link.feature = feature;
- link.onclick = OpenLayers.Function.bind(function() {
- var layer = this.feature.layer;
- for (var i = 0; i < layer.selectedFeatures.length; i++) {
- var f = layer.selectedFeatures[i];
- layer.drawFeature(f, layer.styleMap.createSymbolizer(f, "default"));
- }
- on_feature_hover(this.feature);
- map.setCenter(this.feature.geometry.getBounds().getCenterLonLat());
- }, link);
- li.appendChild(link);
- obj_list.appendChild(li);
- }
- $("object").innerHTML = "";
- $("object").appendChild(obj_list);
- }
- function getData(bounds) {
- $("status").innerHTML = "Loading...";
- bounds.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
- var url = "/api/0.5/map?bbox="+bounds.toBBOX();
- if (!gml) {
- var def = OpenLayers.Feature.Vector.style['default'];
- var style = new OpenLayers.Style();
- style.addRules([new OpenLayers.Rule(
- {'symbolizer':
- {"Polygon": {'fillColor': '#ff0000', 'strokeColor': '#ff0000'},
- "Line": {'fillColor': '#ffff00', 'strokeColor': '#000000', strokeOpacity: '0.4'},
- "Point": {'fillColor': '#00ff00', 'strokeColor': '#00ff00'}}
- }
- )]);
- gml = new OpenLayers.Layer.GML("Data",url,
- {format: OpenLayers.Format.OSM, formatOptions: {checkTags: true},
- styleMap: new OpenLayers.StyleMap({'default': style, 'select': {'strokeColor': '#0000ff'}})
- }
- );
- gml.events.register("loadend", gml, dataLoaded );
- map.addLayer(gml);
- sf = new OpenLayers.Control.SelectFeature(gml, {'onSelect': on_feature_hover});
- map.addControl(sf);
- sf.activate();
+ function customDataLoader(request) {
+ var doc = request.responseXML;
+
+ if (!doc || !doc.documentElement) {
+ doc = request.responseText;
+ }
+
+ var options = {};
+
+ OpenLayers.Util.extend(options, this.formatOptions);
+ if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
+ options.externalProjection = this.projection;
+ options.internalProjection = this.map.getProjectionObject();
+ }
+
+ var gml = this.format ? new this.format(options) : new OpenLayers.Format.GML(options);
+ var features = gml.read(doc);
+ if (!this.maxFeatures || features.length <= this.maxFeatures) {
+ this.addFeatures(features);
+ this.events.triggerEvent("loadend");
+ featureList = [];
+ } else {
+ featureList = features;
+ displayFeatureWarning();
+ }
+ }
+
+ function getData(bounds) {
+ $("status").innerHTML = "Loading...";
+
+ bounds.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
+ var url = "/api/0.5/map?bbox="+bounds.toBBOX();
+
+ if (!gml) {
+ var def = OpenLayers.Feature.Vector.style['default'];
+ var style = new OpenLayers.Style();
+ style.addRules([new OpenLayers.Rule(
+ {'symbolizer':
+ {"Polygon": {'fillColor': '#ff0000', 'strokeColor': '#ff0000'},
+ "Line": {'fillColor': '#ffff00', 'strokeColor': '#000000', strokeOpacity: '0.4'},
+ "Point": {'fillColor': '#00ff00', 'strokeColor': '#00ff00'}}
+ }
+ )]);
+ gml = new OpenLayers.Layer.GML("Data",url,
+ {format: OpenLayers.Format.OSM, formatOptions: {checkTags: true},
+ maxFeatures: 100, requestSuccess: customDataLoader,
+ styleMap: new OpenLayers.StyleMap({'default': style, 'select': {'strokeColor': '#0000ff'}})
+ }
+ );
+ gml.events.register("loadend", gml, dataLoaded );
+ map.addLayer(gml);
+
+ sf = new OpenLayers.Control.SelectFeature(gml, {'onSelect': onFeatureSelect});
+ sf.handler.stopDown = false;
+ sf.handler.stopUp = false;
+ map.addControl(sf);
+ sf.activate();
+
+ } else {
+ gml.setUrl(url);
+ }