-//= require jquery-simulate/jquery.simulate
//= require qs/dist/qs
OSM.Query = function (map) {
}
$("#sidebar_content")
- .on("mouseover", ".query-results li.query-result", showResultGeometry)
- .on("mouseout", ".query-results li.query-result", hideResultGeometry)
- .on("mousedown", ".query-results li.query-result", function () {
- var moved = false;
- $(this).one("click", function (e) {
- if (!moved) {
- var geometry = $(this).data("geometry");
- if (geometry) map.removeLayer(geometry);
-
- if (!$(e.target).is("a")) {
- $(this).find("a").simulate("click", e);
- }
- }
- }).one("mousemove", function () {
- moved = true;
- });
- });
+ .on("mouseover", ".query-results a", showResultGeometry)
+ .on("mouseout", ".query-results a", hideResultGeometry);
function interestingFeature(feature) {
if (feature.tags) {
if (interestingFeature(element)) {
var $li = $("<li>")
- .addClass("query-result list-group-item")
- .data("geometry", featureGeometry(element))
+ .addClass("list-group-item list-group-item-action")
.text(featurePrefix(element) + " ")
.appendTo($ul);
$("<a>")
+ .addClass("stretched-link")
.attr("href", "/" + element.type + "/" + element.id)
+ .data("geometry", featureGeometry(element))
.text(featureName(element))
.appendTo($li);
}
if (results.remark) {
$("<li>")
- .addClass("query-result list-group-item")
+ .addClass("list-group-item")
.text(I18n.t("javascripts.query.error", { server: url, error: results.remark }))
.appendTo($ul);
}
if ($ul.find("li").length === 0) {
$("<li>")
- .addClass("query-result list-group-item")
+ .addClass("list-group-item")
.text(I18n.t("javascripts.query.nothing_found"))
.appendTo($ul);
}
$section.find(".loader").hide();
$("<li>")
- .addClass("query-result list-group-item")
+ .addClass("list-group-item")
.text(I18n.t("javascripts.query." + status, { server: url, error: error }))
.appendTo($ul);
}
* To find nearby objects we ask overpass for the union of the
* following sets:
*
- * node(around:<radius>,<lat>,lng>)
- * way(around:<radius>,<lat>,lng>)
- * relation(around:<radius>,<lat>,lng>)
+ * node(around:<radius>,<lat>,<lng>)
+ * way(around:<radius>,<lat>,<lng>)
+ * relation(around:<radius>,<lat>,<lng>)
*
* to find enclosing objects we first find all the enclosing areas:
*
function queryOverpass(lat, lng) {
var latlng = L.latLng(lat, lng).wrap(),
bounds = map.getBounds().wrap(),
- precision = OSM.zoomPrecision(map.getZoom()),
- bbox = bounds.getSouth().toFixed(precision) + "," +
- bounds.getWest().toFixed(precision) + "," +
- bounds.getNorth().toFixed(precision) + "," +
- bounds.getEast().toFixed(precision),
- radius = 10 * Math.pow(1.5, 19 - map.getZoom()),
- around = "around:" + radius + "," + lat + "," + lng,
- nodes = "node(" + around + ")",
- ways = "way(" + around + ")",
- relations = "relation(" + around + ")",
- nearby = "(" + nodes + ";" + ways + ";);out tags geom(" + bbox + ");" + relations + ";out geom(" + bbox + ");",
- isin = "is_in(" + lat + "," + lng + ")->.a;way(pivot.a);out tags bb;out ids geom(" + bbox + ");relation(pivot.a);out tags bb;";
+ zoom = map.getZoom(),
+ bbox = [bounds.getSouthWest(), bounds.getNorthEast()]
+ .map(c => OSM.cropLocation(c, zoom))
+ .join(),
+ geombbox = "geom(" + bbox + ");",
+ radius = 10 * Math.pow(1.5, 19 - zoom),
+ around = "(around:" + radius + "," + lat + "," + lng + ")",
+ nodes = "node" + around,
+ ways = "way" + around,
+ relations = "relation" + around,
+ nearby = "(" + nodes + ";" + ways + ";);out tags " + geombbox + relations + ";out " + geombbox,
+ isin = "is_in(" + lat + "," + lng + ")->.a;way(pivot.a);out tags bb;out ids " + geombbox + "relation(pivot.a);out tags bb;";
$("#sidebar_content .query-intro")
.hide();
if (marker) map.removeLayer(marker);
- marker = L.circle(latlng, radius, featureStyle).addTo(map);
-
- $(document).everyTime(75, "fadeQueryMarker", function (i) {
- if (i === 10) {
- map.removeLayer(marker);
- } else {
- marker.setStyle({
- opacity: 1 - (i * 0.1),
- fillOpacity: 0.5 - (i * 0.05)
- });
- }
- }, 10);
+ marker = L.circle(latlng, Object.assign({
+ radius: radius,
+ className: "query-marker"
+ }, featureStyle)).addTo(map);
runQuery(latlng, radius, nearby, $("#query-nearby"), false);
runQuery(latlng, radius, isin, $("#query-isin"), true, compareSize);
}
function clickHandler(e) {
- var precision = OSM.zoomPrecision(map.getZoom()),
- latlng = e.latlng.wrap(),
- lat = latlng.lat.toFixed(precision),
- lng = latlng.lng.toFixed(precision);
+ const [lat, lon] = OSM.cropLocation(e.latlng, map.getZoom());
- OSM.router.route("/query?lat=" + lat + "&lon=" + lng);
+ OSM.router.route("/query?" + Qs.stringify({ lat, lon }));
}
function enableQueryMode() {
page.unload = function (sameController) {
if (!sameController) {
disableQueryMode();
- $("#sidebar_content .query-results li.query-result.selected").each(hideResultGeometry);
+ $("#sidebar_content .query-results a.selected").each(hideResultGeometry);
}
};