X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/203ba58bab01b7a61cdff8974cbbfe4f7f639cb1..2e05669a22ce73fff3dc81aa99694bc893d249b7:/app/assets/javascripts/index/query.js?ds=inline
diff --git a/app/assets/javascripts/index/query.js b/app/assets/javascripts/index/query.js
index 5ce996927..01a8a1f69 100644
--- a/app/assets/javascripts/index/query.js
+++ b/app/assets/javascripts/index/query.js
@@ -198,16 +198,48 @@ OSM.Query = function(map) {
.text(I18n.t("javascripts.query.nothing_found"))
.appendTo($ul);
}
+ },
+ error: function(xhr, status, error) {
+ $section.find(".loader").stopTime("loading").hide();
+
+ $("
")
+ .text(I18n.t("javascripts.query." + status, { server: OSM.OVERPASS_URL, error: error }))
+ .appendTo($ul);
}
}));
}
+ /*
+ * To find nearby objects we ask overpass for the union of the
+ * following sets:
+ *
+ * node(around:,,lng>)
+ * way(around:,,lng>)
+ * node(w)
+ * relation(around:,,lng>)
+ *
+ * to find enclosing objects we first find all the enclosing areas:
+ *
+ * is_in(,)->.a
+ *
+ * and then return the union of the following sets:
+ *
+ * relation(pivot.a)
+ * way(pivot.a)
+ * node(w)
+ *
+ * In order to avoid overly large responses we don't currently
+ * attempt to complete any relations and instead just show those
+ * ways and nodes which are returned for other reasons.
+ */
function queryOverpass(lat, lng) {
var latlng = L.latLng(lat, lng),
radius = 10 * Math.pow(1.5, 19 - map.getZoom()),
around = "around:" + radius + "," + lat + "," + lng,
- features = "(node(" + around + ");way(" + around + ");relation(" + around + "))",
- nearby = "((" + features + ";way(bn));node(w));out;",
+ nodes = "node(" + around + ")",
+ ways = "way(" + around + ");node(w)",
+ relations = "relation(" + around + ")",
+ nearby = "(" + nodes + ";" + ways + ";" + relations + ");out;",
isin = "is_in(" + lat + "," + lng + ")->.a;(relation(pivot.a);way(pivot.a);node(w));out;";
$("#sidebar_content .query-intro")
@@ -256,17 +288,23 @@ OSM.Query = function(map) {
page.pushstate = page.popstate = function(path) {
OSM.loadSidebarContent(path, function () {
- page.load(path);
+ page.load(path, true);
});
};
- page.load = function(path) {
- var params = querystring.parse(path.substring(path.indexOf('?') + 1));
+ page.load = function(path, noCentre) {
+ var params = querystring.parse(path.substring(path.indexOf('?') + 1)),
+ latlng = L.latLng(params.lat, params.lon);
+
+ if (!window.location.hash &&
+ (!noCentre || !map.getBounds().contains(latlng))) {
+ OSM.router.withoutMoveListener(function () {
+ map.setView(latlng, 15);
+ });
+ }
queryOverpass(params.lat, params.lon);
enableQueryMode();
-
- return map.getState();
};
page.unload = function() {