mirror of
https://github.com/FoggedLens/iD.git
synced 2026-04-30 07:27:54 +02:00
Autocomplete city and postcode values, closes #1753
This commit is contained in:
@@ -8,7 +8,6 @@ iD.ui.preset.address = function(field, context) {
|
||||
entity;
|
||||
|
||||
function getStreets() {
|
||||
|
||||
var extent = entity.extent(context.graph()),
|
||||
l = extent.center(),
|
||||
box = iD.geo.Extent(l).padByMeters(200);
|
||||
@@ -34,6 +33,62 @@ iD.ui.preset.address = function(field, context) {
|
||||
}
|
||||
}
|
||||
|
||||
function getCities() {
|
||||
var extent = entity.extent(context.graph()),
|
||||
l = extent.center(),
|
||||
box = iD.geo.Extent(l).padByMeters(200);
|
||||
|
||||
return context.intersects(box)
|
||||
.filter(isAddressable)
|
||||
.map(function(d) {
|
||||
return {
|
||||
title: d.tags['addr:city'] || d.tags.name,
|
||||
value: d.tags['addr:city'] || d.tags.name,
|
||||
dist: iD.geo.sphericalDistance(d.extent(context.graph()).center(), l)
|
||||
};
|
||||
}).sort(function(a, b) {
|
||||
return a.dist - b.dist;
|
||||
});
|
||||
|
||||
function isAddressable(d) {
|
||||
if (d.tags.name &&
|
||||
(d.tags.admin_level === '8' || d.tags.border_type === 'city'))
|
||||
return true;
|
||||
|
||||
if (d.tags.place && d.tags.name && (
|
||||
d.tags.place === 'city' ||
|
||||
d.tags.place === 'town' ||
|
||||
d.tags.place === 'village'))
|
||||
return true;
|
||||
|
||||
if (d.tags['addr:city']) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function getPostCodes() {
|
||||
var extent = entity.extent(context.graph()),
|
||||
l = extent.center(),
|
||||
box = iD.geo.Extent(l).padByMeters(200);
|
||||
|
||||
return context.intersects(box)
|
||||
.filter(isAddressable)
|
||||
.map(function(d) {
|
||||
return {
|
||||
title: d.tags['addr:postcode'],
|
||||
value: d.tags['addr:postcode'],
|
||||
dist: iD.geo.sphericalDistance(d.extent(context.graph()).center(), l)
|
||||
};
|
||||
}).sort(function(a, b) {
|
||||
return a.dist - b.dist;
|
||||
});
|
||||
|
||||
function isAddressable(d) {
|
||||
return d.tags['addr:postcode'];
|
||||
}
|
||||
}
|
||||
|
||||
function address(selection) {
|
||||
var wrap = selection.selectAll('.preset-input-wrap')
|
||||
.data([0]);
|
||||
@@ -86,6 +141,18 @@ iD.ui.preset.address = function(field, context) {
|
||||
.fetcher(function(value, callback) {
|
||||
callback(getStreets());
|
||||
}));
|
||||
|
||||
city
|
||||
.call(d3.combobox()
|
||||
.fetcher(function(value, callback) {
|
||||
callback(getCities());
|
||||
}));
|
||||
|
||||
postcode
|
||||
.call(d3.combobox()
|
||||
.fetcher(function(value, callback) {
|
||||
callback(getPostCodes());
|
||||
}));
|
||||
}
|
||||
|
||||
function change() {
|
||||
|
||||
Reference in New Issue
Block a user