Pull imagery from editor-imagery-index

This commit is contained in:
John Firebaugh
2013-08-27 11:07:46 -07:00
parent 20cf935c46
commit 4e8cb0b97f
9 changed files with 1101 additions and 882 deletions

View File

@@ -84,6 +84,9 @@ clean:
translations:
node data/update_locales
imagery:
node data/update_imagery
SPRITE = inkscape --export-area-page
dist/img/line-presets.png: svg/line-presets.svg

File diff suppressed because it is too large Load Diff

View File

@@ -1,223 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<imagery>
<set>
<name>Bing aerial imagery</name>
<url>http://ecn.t${0|1|2|3}.tiles.virtualearth.net/tiles/a$quadkey.jpeg?g=587&amp;mkt=en-gb&amp;n=z</url>
<scheme>microsoft</scheme>
<sourcetag>Bing</sourcetag>
<attribution_url>http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/0,0?zl=1&amp;mapVersion=v1&amp;key=Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU&amp;include=ImageryProviders&amp;output=xml</attribution_url>
<logo>bing_maps.png</logo>
<logo_url>http://www.bing.com/maps</logo_url>
<terms_url>http://opengeodata.org/microsoft-imagery-details</terms_url>
<default>yes</default>
</set>
<set>
<name>MapBox Satellite</name>
<url>http://${a|b|c}.tiles.mapbox.com/v3/openstreetmap.map-4wvf9l0l/$z/$x/$y.png</url>
<terms_url>http://mapbox.com/tos/</terms_url>
</set>
<set>
<name>MapQuest Open Aerial</name>
<url>http://oatile1.mqcdn.com/tiles/1.0.0/sat/$z/$x/$y.jpg</url>
<terms_url>http://developer.mapquest.com/web/products/open/map#terms</terms_url>
</set>
<set>
<name>OSM - Mapnik</name>
<url>http://${a|b|c}.tile.openstreetmap.org/$z/$x/$y.png</url>
</set>
<set>
<name>OSM - OpenCycleMap</name>
<url>http://tile.opencyclemap.org/cycle/$z/$x/$y.png</url>
</set>
<set>
<name>OSM - MapQuest</name>
<url>http://otile1.mqcdn.com/tiles/1.0.0/osm/$z/$x/$y.jpg</url>
</set>
<set minlat="24.055" minlon="-124.810" maxlat="49.386" maxlon="-66.865">
<name>OSM - Tiger Edited Map</name>
<type>900913</type>
<url>http://tiger-osm.mapquest.com/tiles/1.0.0/tiger/$z/$x/$y.png</url>
</set>
<set minlat="50.858" minlon="-179.754" maxlat="71.463" maxlon="-129.899">
<name>OSM - Tiger Edited Map</name>
<type>900913</type>
<url>http://tiger-osm.mapquest.com/tiles/1.0.0/tiger/$z/$x/$y.png</url>
</set>
<set minlat="18.702" minlon="-174.460" maxlat="26.501" maxlon="-154.516">
<name>OSM - Tiger Edited Map</name>
<type>900913</type>
<url>http://tiger-osm.mapquest.com/tiles/1.0.0/tiger/$z/$x/$y.png</url>
</set>
<set minlat="24.055" minlon="-124.810" maxlat="49.386" maxlon="-66.865">
<name>OSM US TIGER 2012 Roads Overlay</name>
<type>900913</type>
<url>http://${a|b|c}.tile.openstreetmap.us/tiger2012_roads_expanded/$z/$x/$y.png</url>
</set>
<set minlat="50.858" minlon="-179.754" maxlat="71.463" maxlon="-129.899">
<name>OSM US TIGER 2012 Roads Overlay</name>
<type>900913</type>
<url>http://${a|b|c}.tile.openstreetmap.us/tiger2012_roads_expanded/$z/$x/$y.png</url>
</set>
<set minlat="18.702" minlon="-174.460" maxlat="26.501" maxlon="-154.516">
<name>OSM US TIGER 2012 Roads Overlay</name>
<type>900913</type>
<url>http://${a|b|c}.tile.openstreetmap.us/tiger2012_roads_expanded/$z/$x/$y.png</url>
</set>
<set minlat="24.005" minlon="-125.991" maxlat="50.009" maxlon="-65.988">
<name>OSM US USGS Topographic Maps</name>
<type>900913</type>
<url>http://${a|b|c}.tile.openstreetmap.us/usgs_scanned_topos/$z/$x/$y.png</url>
</set>
<set minlat="18.902" minlon="-160.579" maxlat="22.508" maxlon="-154.793">
<name>OSM US USGS Topographic Maps</name>
<type>900913</type>
<url>http://${a|b|c}.tile.openstreetmap.us/usgs_scanned_topos/$z/$x/$y.png</url>
</set>
<set minlat="51.255" minlon="-178.001" maxlat="71.999" maxlon="-130.004">
<name>OSM US USGS Topographic Maps</name>
<type>900913</type>
<url>http://${a|b|c}.tile.openstreetmap.us/usgs_scanned_topos/$z/$x/$y.png</url>
</set>
<set minlat="24.496" minlon="-124.819" maxlat="49.443" maxlon="-66.931">
<name>OSM US USGS Large Scale Aerial Imagery</name>
<type>900913</type>
<url>http://${a|b|c}.tile.openstreetmap.us/usgs_large_scale/$z/$x/$y.jpg</url>
</set>
<set minlat="48.995" minlon="-123.441" maxlat="50.426" maxlon="-121.346">
<name>British Columbia bc_mosaic</name>
<type>900913</type>
<url>http://${a|b|c|d}.imagery.paulnorman.ca/tiles/bc_mosaic/$z/$x/$y.png</url>
<terms_url>http://imagery.paulnorman.ca/tiles/about.html</terms_url>
<sourcetag>bc_mosaic</sourcetag>
</set>
<set minlat="49.86" minlon="-8.72" maxlat="60.92" maxlon="1.84">
<name>OS OpenData Streetview</name>
<url>http://os.openstreetmap.org/sv/$z/$x/$y.png</url>
<sourcetag>OS_OpenData_StreetView</sourcetag>
</set>
<set minlat="49.8" minlon="-9" maxlat="61.1" maxlon="1.9">
<name>OS OpenData Locator</name>
<url>http://tiles.itoworld.com/os_locator/$z/$x/$y.png</url>
<sourcetag>OS_OpenData_Locator</sourcetag>
<sourcekey>source:name</sourcekey>
</set>
<set minlat="49.8" minlon="-9" maxlat="61.1" maxlon="1.9">
<name>OS 1:25k historic (OSM)</name>
<url>http://ooc.openstreetmap.org/os1/$z/$x/$y.jpg</url>
<sourcetag>OS 1:25k</sourcetag>
</set>
<set minlat="49.8" minlon="-9" maxlat="61.1" maxlon="1.9">
<name>OS 1:25k historic (NLS)</name>
<scheme>tms</scheme>
<url>http://geo.nls.uk/mapdata2/os/25000/$z/$x/$y.png</url>
<logo>icons/logo_nls70-nq8.png</logo>
<logo_url>http://geo.nls.uk/maps/</logo_url>
<sourcetag>OS 1:25k</sourcetag>
</set>
<set minlat="49.8" minlon="-9" maxlat="61.1" maxlon="1.9">
<name>OS 7th Series historic (OSM)</name>
<url>http://ooc.openstreetmap.org/os7/$z/$x/$y.jpg</url>
<sourcetag>OS7</sourcetag>
</set>
<set minlat="49.8" minlon="-9" maxlat="61.1" maxlon="1.9">
<name>OS 7th Series historic (NLS)</name>
<scheme>tms</scheme>
<url>http://geo.nls.uk/mapdata2/os/seventh/$z/$x/$y.png</url>
<logo>icons/logo_nls70-nq8.png</logo>
<logo_url>http://geo.nls.uk/maps/</logo_url>
<sourcetag>OS7</sourcetag>
</set>
<set minlat="49.8" minlon="-5.8" maxlat="55.8" maxlon="1.9">
<name>OS New Popular Edition historic</name>
<url>http://ooc.openstreetmap.org/npe/$z/$x/$y.png</url>
<sourcetag>NPE</sourcetag>
</set>
<set minlat="54.5" minlon="-7.8" maxlat="61.1" maxlon="-1.1">
<name>OS Scottish Popular historic</name>
<url>http://ooc.openstreetmap.org/npescotland/tiles/$z/$x/$y.jpg</url>
<sourcetag>NPE</sourcetag>
</set>
<set minlat="51.071" minlon="-0.856" maxlat="51.473" maxlon="0.062">
<name>Surrey aerial</name>
<url>http://gravitystorm.dev.openstreetmap.org/surrey/$z/$x/$y.png</url>
<sourcetag>Surrey aerial</sourcetag>
</set>
<set minlat="18.50" minlon="-72.43" maxlat="18.58" maxlon="-72.31">
<name>Port au Prince - GeoEye Jan 2010</name>
<url>http://gravitystorm.dev.openstreetmap.org/imagery/haiti/$z/$x/$y.png</url>
<sourcetag>Port au Prince GeoEye, 2010-01</sourcetag>
</set>
<set minlat="17.95" minlon="-74.5" maxlat="20.12" maxlon="-71.58">
<name>Haiti - IOM Drone Imagery, 2012-13</name>
<url>http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}</url>
<sourcetag>iom_image2013</sourcetag>
</set>
<set minlat="24.2" minlon="-125.8" maxlat="49.5" maxlon="-62.3">
<name>National Agriculture Imagery Program</name>
<url>http://cube.telascience.org/tilecache/tilecache.py/NAIP_ALL/$z/$x/$y.png</url>
<sourcetag>NAIP</sourcetag>
</set>
<set minlat="55.3" minlon="-168.5" maxlat="71.5" maxlon="-140">
<name>National Agriculture Imagery Program</name>
<url>http://cube.telascience.org/tilecache/tilecache.py/NAIP_ALL/$z/$x/$y.png</url>
<sourcetag>NAIP</sourcetag>
</set>
<set minlat="51.32" minlon="-10.71" maxlat="55.46" maxlon="-5.37">
<name>Ireland - NLS Historic Maps</name>
<scheme>tms</scheme>
<sourcetag>NLS Historic Maps</sourcetag>
<url>http://geo.nls.uk/maps/ireland/gsgs4136/$z/$x/$y.png</url>
<logo>icons/logo_nls70-nq8.png</logo>
<logo_url>http://geo.nls.uk/maps/</logo_url>
</set>
<set minlat="54.44" minlon="7.81" maxlat="57.86" maxlon="15.49">
<name>Denmark - Fugro Aerial Imagery</name>
<url>http://tile.openstreetmap.dk/fugro2005/$z/$x/$y.jpg</url>
<sourcetag>Fugro (2005)</sourcetag>
</set>
<set minlat="55.23403" minlon="12.09144" maxlat="55.43647" maxlon="12.47712">
<name>Denmark - Stevns Kommune</name>
<url>http://tile.openstreetmap.dk/stevns/2009/$z/$x/$y.jpg</url>
<sourcetag>Stevns Kommune (2009)</sourcetag>
</set>
<set minlat="46.33" minlon="9.36" maxlat="49.09" maxlon="17.28">
<name>Austria - geoimage.at</name>
<url>http://geoimage.openstreetmap.at/4d80de696cd562a63ce463a58a61488d/$z/$x/$y.jpg</url>
<sourcetag>geoimage.at</sourcetag>
</set>
<set minlon="19.02" minlat="40.96" maxlon="77.34" maxlat="70.48">
<name>Russia - Kosmosnimki.ru IRS Satellite</name>
<url>http://irs.gis-lab.info/?layers=irs&amp;request=GetTile&amp;z=$z&amp;x=$x&amp;y=$y</url>
<sourcetag>Kosmosnimki.ru IRS</sourcetag>
</set>
<set minlon="23.16" minlat="51.25" maxlon="32.83" maxlat="56.19">
<name>Belarus - Kosmosnimki.ru SPOT4 Satellite</name>
<url>http://irs.gis-lab.info/?layers=spot&amp;request=GetTile&amp;z=$z&amp;x=$x&amp;y=$y</url>
<sourcetag>Kosmosnimki.ru SPOT4</sourcetag>
</set>
<set minlon="96" minlat="-44" maxlon="168" maxlat="-9">
<name>Australia - Geographic Reference Image</name>
<url>http://agri.openstreetmap.org/$z/$x/$y.png</url>
<sourcetag>AGRI</sourcetag>
</set>
<set minlat="47.13" minlon="7.69" maxlat="47.63" maxlon="8.48">
<name>Switzerland - Canton Aargau - AGIS 25cm 2011</name>
<url>http://tiles.poole.ch/AGIS/OF2011/$z/$x/$y.png</url>
<sourcetag>AGIS OF2011</sourcetag>
</set>
<set minlat="47.06" minlon="7.33" maxlat="47.5" maxlon="8.04">
<name>Switzerland - Canton Solothurn - SOGIS 2007</name>
<url>http://mapproxy.sosm.ch:8080/tiles/sogis2007/EPSG900913/$z/$x/$y.png?origin=nw</url>
<sourcetag>Orthofoto 2007 WMS Solothurn</sourcetag>
</set>
<set minlat="48.9" minlon="14" maxlat="55" maxlon="24.2">
<name>Poland - Media-Lab fleet GPS masstracks</name>
<url>http://masstracks.media-lab.com.pl/$z/$x/$y.png</url>
<sourcetag>masstracks</sourcetag>
</set>
<set minlat="-34.95" minlon="17.64" maxlat="-22.05" maxlon="32.87">
<name>South Africa - CD:NGI Aerial</name>
<url>http://${a|b|c}.aerial.openstreetmap.org.za/ngi-aerial/$z/$x/$y.jpg</url>
<sourcetag>ngi-aerial</sourcetag>
</set>
</imagery>

View File

@@ -1,86 +0,0 @@
var fs = require('fs'),
cheerio = require('cheerio');
$ = cheerio.load(fs.readFileSync('imagery.xml'));
var imagery = [];
// CENSORSHIP! No, these are just layers that essentially duplicate other layers
// or which have no clear use case.
var censor = {
'MapQuest Open Aerial': true,
'OSM - OpenCycleMap': true,
'OSM - MapQuest': true
};
var replace = {
'OSM - Mapnik': 'OpenStreetMap',
'National Agriculture Imagery Program': 'NAIP'
};
var description = {
'MapBox Satellite': 'Satellite and aerial imagery.',
'OpenStreetMap': 'The default OpenStreetMap layer.',
'OSM US TIGER 2012 Roads Overlay': 'Public domain road data from the US Government.',
'Bing aerial imagery': 'Satellite imagery.',
'NAIP': 'National Agriculture Imagery Program'
};
var scaleExtent = {
'MapBox Satellite': [0, 16],
'OpenStreetMap': [0, 18],
'OSM US TIGER 2012 Roads Overlay': [0, 17],
'Bing aerial imagery': [0, 20]
};
$('set').each(function(i) {
var elem = $(this);
var im = {
name: $(this).find('name').first().text(),
template: $(this).find('url').first().text()
};
// no luck with mapquest servers currently...
if (im.template.match(/mapquest/g)) return;
if (censor[im.name]) return;
im.name = im.name.replace('OSM US', '');
if (replace[im.name]) im.name = replace[im.name];
if (description[im.name]) im.description = description[im.name];
if (scaleExtent[im.name]) im.scaleExtent = scaleExtent[im.name];
var subdomains = [];
im.template = im.template
.replace('$quadkey', '{u}')
.replace(/\$(\w)/g, function(m) {
return '{' + m[1] + '}';
})
.replace(/\$\{([^}.]+)\}/g, function(m) {
subdomains = m.slice(2, m.length - 1).split('|');
return '{t}';
});
if (subdomains.length) im.subdomains = subdomains;
if (elem.attr('minlat')) {
im.extent = [
[+elem.attr('minlon'),
+elem.attr('minlat')],
[+elem.attr('maxlon'),
+elem.attr('maxlat')]];
}
['default', 'sourcetag', 'logo', 'logo_url', 'terms_url'].forEach(function(a) {
if (elem.find(a).length) {
im[a] = elem.find(a).first().text();
}
});
imagery.push(im);
});
fs.writeFileSync('imagery.json', JSON.stringify(imagery, null, 4));

82
data/update_imagery.js Normal file
View File

@@ -0,0 +1,82 @@
var fs = require('fs');
var sources = require('editor-imagery-index/imagery.json');
var imagery = [];
// CENSORSHIP! No, these are just layers that essentially duplicate other layers
// or which have no clear use case.
var censor = {
"2u": true,
"Hike & Bike": true,
"OpenCycleMap": true,
"OpenStreetMap (German Language)": true,
"OpenStreetMap (German Style)": true,
"OpenStreetMap (Sorbian Language)": true,
"MapQuest OSM": true,
"OpenStreetMap (Mapnik Black & White)": true,
"Skobbler": true,
"Stadtplan Z\u00fcrich": true, // https://github.com/osmlab/editor-imagery-index/issues/14
"Public Transport (\u00d6PNV)": true // https://github.com/osmlab/editor-imagery-index/issues/15
};
var description = {
'MapBox Satellite': 'Satellite and aerial imagery.',
'OpenStreetMap (Mapnik)': 'The default OpenStreetMap layer.',
'TIGER 2012 Roads Overlay': 'Public domain road data from the US Government.',
'Bing aerial imagery': 'Satellite and aerial imagery.',
'NAIP': 'National Agriculture Imagery Program'
};
sources.forEach(function(source) {
if (source.type !== 'tms' && source.type !== 'bing')
return;
if (source.name in censor)
return;
var im = {
name: source.name,
type: source.type
};
if (description[im.name]) im.description = description[im.name];
im.template = source.url;
var extent = source.extent || {};
if (extent.min_zoom || extent.max_zoom) {
im.scaleExtent = [
+(extent.min_zoom || 0),
+(extent.max_zoom || 20)
];
}
if (extent.bbox) {
im.extents = [[
[+extent.bbox.min_lon, +extent.bbox.min_lat],
[+extent.bbox.max_lon, +extent.bbox.max_lat]
]];
}
var attribution = source.attribution || {};
if (attribution.url) {
im.terms_url = attribution.url;
}
if (attribution.text) {
im.terms_text = attribution.text;
}
['id', 'default', 'overlay'].forEach(function(a) {
if (source[a]) {
im[a] = source[a];
}
});
imagery.push(im);
});
imagery.sort(function(a, b) {
return a.name.localeCompare(b.name);
});
fs.writeFileSync('data/imagery.json', JSON.stringify(imagery, null, 4));

View File

@@ -7,31 +7,31 @@ iD.Background = function(context) {
overlayLayers = [];
var backgroundSources = iD.data.imagery.map(function(source) {
if (source.sourcetag === 'Bing') {
if (source.type === 'bing') {
return iD.BackgroundSource.Bing(source, dispatch);
} else {
return iD.BackgroundSource(source);
}
});
function findSource(sourcetag) {
function findSource(id) {
return _.find(backgroundSources, function(d) {
return d.sourcetag && d.sourcetag === sourcetag;
return d.id && d.id === id;
});
}
function updateImagery() {
var b = background.baseLayerSource(),
o = overlayLayers.map(function (d) { return d.source().sourcetag; }).join(','),
o = overlayLayers.map(function (d) { return d.source().id; }).join(','),
q = iD.util.stringQs(location.hash.substring(1));
var tag = b.sourcetag;
if (!tag && b.name === 'Custom') {
tag = 'custom:' + b.template;
var id = b.id;
if (!id && b.name === 'Custom') {
id = 'custom:' + b.template;
}
if (tag) {
q.background = tag;
if (id) {
q.background = id;
} else {
delete q.background;
}
@@ -48,13 +48,13 @@ iD.Background = function(context) {
if (b.name === 'Custom') {
imageryUsed.push('Custom (' + b.template + ')');
} else {
imageryUsed.push(b.sourcetag || b.name);
imageryUsed.push(b.id || b.name);
}
overlayLayers.forEach(function (d) {
var source = d.source();
if (!source.isLocatorOverlay()) {
imageryUsed.push(source.sourcetag || source.name);
imageryUsed.push(source.id || source.name);
}
});

View File

@@ -17,29 +17,15 @@ iD.BackgroundSource = function(data) {
};
source.url = function(coord) {
var u = '';
for (var zoom = coord[2]; zoom > 0; zoom--) {
var b = 0;
var mask = 1 << (zoom - 1);
if ((coord[0] & mask) !== 0) b++;
if ((coord[1] & mask) !== 0) b += 2;
u += b.toString();
}
return data.template
.replace('{t}', data.subdomains ?
data.subdomains[(coord[0] + coord[1]) % data.subdomains.length] : '')
.replace('{u}', u)
.replace('{x}', coord[0])
.replace('{y}', coord[1])
// TMS-flipped y coordinate
.replace('{ty}', Math.pow(2, coord[2]) - coord[1] - 1)
.replace('{z}', coord[2])
// JOSM style
.replace('{zoom}', coord[2])
.replace(/\{(switch\:[^\}]*)\}/, function(s, r) {
var subdomains = r.split(':')[1].split(',');
return subdomains[coord[2] % subdomains.length];
.replace(/\{z(oom)?\}/, coord[2])
.replace(/\{switch:([^}]+)\}/, function(s, r) {
var subdomains = r.split(',');
return subdomains[(coord[0] + coord[1]) % subdomains.length];
});
};
@@ -88,6 +74,25 @@ iD.BackgroundSource.Bing = function(data, dispatch) {
dispatch.change();
});
var template = "http://ecn.t{t}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z",
subdomains = [0, 1, 2, 3];
bing.url = function(coord) {
var u = '';
for (var zoom = coord[2]; zoom > 0; zoom--) {
var b = 0;
var mask = 1 << (zoom - 1);
if ((coord[0] & mask) !== 0) b++;
if ((coord[1] & mask) !== 0) b += 2;
u += b.toString();
}
return template
.replace('{t}', subdomains[(coord[0] + coord[1]) % 4])
.replace('{u}', u);
};
bing.copyrightNotices = function(zoom, extent) {
zoom = Math.min(zoom, 21);
return providers.filter(function(provider) {
@@ -101,5 +106,8 @@ iD.BackgroundSource.Bing = function(data, dispatch) {
}).join(', ');
};
bing.logo = "bing_maps.png";
bing.terms_url = "http://opengeodata.org/microsoft-imagery-details";
return bing;
};

View File

@@ -14,7 +14,7 @@ iD.ui.Attribution = function(context) {
.append('span')
.attr('class', 'provided-by')
.each(function(d) {
var source = d.sourcetag || d.name;
var source = d.terms_text || d.id || d.name;
if (d.logo) {
source = '<img class="source-image" src="' + context.imagePath(d.logo) + '">';

View File

@@ -35,7 +35,8 @@
"request": "~2.16.2",
"jsonschema": "~0.3.2",
"node-sprite": "~0.1.2",
"delve": "0.2"
"delve": "0.2",
"editor-imagery-index": "git://github.com/osmlab/editor-imagery-index.git#gh-pages"
},
"engines": {
"node": ">=0.10.0"