diff options
-rw-r--r-- | examples/buildingsearch.html | 2 | ||||
-rw-r--r-- | src/leaflet-soton.js | 62 |
2 files changed, 63 insertions, 1 deletions
diff --git a/examples/buildingsearch.html b/examples/buildingsearch.html index 8bb64b7..77843e9 100644 --- a/examples/buildingsearch.html +++ b/examples/buildingsearch.html @@ -149,7 +149,7 @@ body { height: 100%; margin: 0px; padding: 0px } a.href = "#"; a.onclick = function() { - map.showByURI(building.properties.uri); + map.panByURI(building.properties.uri); }; var label = document.createElement("span"); diff --git a/src/leaflet-soton.js b/src/leaflet-soton.js index e5bb696..baaafa9 100644 --- a/src/leaflet-soton.js +++ b/src/leaflet-soton.js @@ -882,6 +882,68 @@ SELECT * WHERE {\ throw "unable to handle " + feature.geometry.type; } }, + panByURI: function(uri) { + var feature = LS.getFeatureByURI(uri); + + if (feature === null) { + throw "can't find " + uri; + } + + if (!("geometry" in feature)) { + throw "no location for " + uri; + } + + if (feature.geometry.type === "Polygon") { + console.log(feature); + + var center; + if ("center" in feature.properties) { + center = feature.properties.center; + } else { + center = feature.geometry.coordinates[0][0]; + center = [center[1], center[0]]; + } + + this.panTo(center); + + if ("level" in feature.properties) { + if (L.Util.isArray(feature.properties.level)) { + this.setLevel(feature.properties.level[0]); + } else { + this.setLevel(feature.properties.level); + } + } + + this.closePopup(); + + return; + } else if (feature.geometry.type === "Point") { + this.panTo(L.GeoJSON.coordsToLatLng(feature.geometry.coordinates)); + + if ("level" in feature.properties) { + if (L.Util.isArray(feature.properties.level)) { + this.setLevel(feature.properties.level[0]); + } else { + this.setLevel(feature.properties.level); + } + } else { + // If this is a workstation + if (uri.indexOf("http://id.southampton.ac.uk/point-of-service/workstations") === 0) { + var room = LS.getRoomFor(uri); + + if (room !== null) { + this.setLevel(room.properties.level); + } + } + } + + this.closePopup(); + return; + } else { + throw "unable to handle " + feature.geometry.type; + } + + }, showInfo: function(content, latlng, options) { options = options || {}; |