Use details attribute to render changeset bounding box
Do this instead of using L.OSM.DataLayer. DataLayer makes an extra request just to get the bbox. Also it expects bbox to always exist, which is not true for some changesets.
This commit is contained in:
parent
0b0569f150
commit
c887f1d7b2
2 changed files with 27 additions and 21 deletions
|
@ -1,29 +1,26 @@
|
|||
OSM.Changeset = function (map) {
|
||||
var page = {},
|
||||
content = $("#sidebar_content"),
|
||||
currentChangesetId;
|
||||
content = $("#sidebar_content");
|
||||
|
||||
page.pushstate = page.popstate = function (path, id) {
|
||||
page.pushstate = page.popstate = function (path) {
|
||||
OSM.loadSidebarContent(path, function () {
|
||||
page.load(path, id);
|
||||
page.load();
|
||||
});
|
||||
};
|
||||
|
||||
page.load = function (path, id) {
|
||||
if (id) currentChangesetId = id;
|
||||
initialize();
|
||||
addChangeset(currentChangesetId);
|
||||
};
|
||||
page.load = function () {
|
||||
const changesetData = content.find("[data-changeset]").data("changeset");
|
||||
changesetData.type = "changeset";
|
||||
|
||||
function addChangeset(id) {
|
||||
map.addObject({ type: "changeset", id: parseInt(id, 10) }, function (bounds) {
|
||||
initialize();
|
||||
map.addObject(changesetData, function (bounds) {
|
||||
if (!window.location.hash && bounds.isValid()) {
|
||||
OSM.router.withoutMoveListener(function () {
|
||||
map.fitBounds(bounds);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function updateChangeset(method, url, include_data) {
|
||||
var data;
|
||||
|
|
|
@ -267,7 +267,7 @@ L.OSM.Map = L.Map.extend({
|
|||
|
||||
this.removeObject();
|
||||
|
||||
if (object.type === "note") {
|
||||
if (object.type === "note" || object.type === "changeset") {
|
||||
this._objectLoader = {
|
||||
abort: function () {}
|
||||
};
|
||||
|
@ -275,18 +275,27 @@ L.OSM.Map = L.Map.extend({
|
|||
this._object = object;
|
||||
this._objectLayer = L.featureGroup().addTo(this);
|
||||
|
||||
L.circleMarker(object.latLng, haloStyle).addTo(this._objectLayer);
|
||||
if (object.type === "note") {
|
||||
L.circleMarker(object.latLng, haloStyle).addTo(this._objectLayer);
|
||||
|
||||
if (object.icon) {
|
||||
L.marker(object.latLng, {
|
||||
icon: object.icon,
|
||||
opacity: 1,
|
||||
interactive: true
|
||||
}).addTo(this._objectLayer);
|
||||
if (object.icon) {
|
||||
L.marker(object.latLng, {
|
||||
icon: object.icon,
|
||||
opacity: 1,
|
||||
interactive: true
|
||||
}).addTo(this._objectLayer);
|
||||
}
|
||||
} else if (object.type === "changeset") {
|
||||
if (object.bbox) {
|
||||
L.rectangle([
|
||||
[object.bbox.minlat, object.bbox.minlon],
|
||||
[object.bbox.maxlat, object.bbox.maxlon]
|
||||
], changesetStyle).addTo(this._objectLayer);
|
||||
}
|
||||
}
|
||||
|
||||
if (callback) callback(this._objectLayer.getBounds());
|
||||
} else { // element or changeset handled by L.OSM.DataLayer
|
||||
} else { // element handled by L.OSM.DataLayer
|
||||
var map = this;
|
||||
this._objectLoader = $.ajax({
|
||||
url: OSM.apiUrl(object),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue