Merge pull request #665 from systemed/dynamic-layers

Dynamic layers
This commit is contained in:
Tom MacWright
2013-02-06 14:41:21 -08:00
13 changed files with 1125 additions and 341 deletions
+4 -3
View File
@@ -30,6 +30,9 @@ all: \
js/id/connection.js \
js/id/oauth.js \
js/id/services/*.js \
data/data.js \
data/imagery.js \
data/deprecated.js \
js/id/util.js \
js/id/geo.js \
js/id/geo/*.js \
@@ -50,9 +53,7 @@ all: \
js/id/validate.js \
js/id/end.js \
locale/locale.js \
locale/en.js \
data/data.js \
data/deprecated.js
locale/en.js
iD.js: Makefile
@rm -f $@
+6 -1
View File
@@ -93,7 +93,6 @@ a:hover {
color:#597be7;
}
textarea,
input[type=text] {
background-color: white;
@@ -186,6 +185,8 @@ ul.toggle-list li a {
border-top: 1px solid white;
display:block;
border-top: 1px solid rgba(0, 0, 0, .5);
text-wrap:no-wrap;
overflow:hidden;
}
ul.toggle-list li a:hover { background-color: #ececec;}
@@ -687,6 +688,10 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;}
top:190px;
}
.layerswitcher-control .map-overlay {
width:250px;
}
.nudge-container {
margin-top: 10px;
}
+602
View File
@@ -0,0 +1,602 @@
iD.data.imagery = [
{
"name": "Bing aerial imagery",
"template": "http://ecn.t0.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z",
"description": "Satellite imagery.",
"scaleExtent": [
0,
20
],
"default": "yes",
"sourcetag": "Bing",
"logo": "bing_maps.png",
"logo_url": "http://www.bing.com/maps",
"terms_url": "http://opengeodata.org/microsoft-imagery-details"
},
{
"name": "MapBox Satellite",
"template": "http://{t}.tiles.mapbox.com/v3/openstreetmap.map-4wvf9l0l/{z}/{x}/{y}.png",
"description": "Satellite and aerial imagery",
"scaleExtent": [
0,
16
],
"subdomains": [
"a",
"b",
"c"
]
},
{
"name": "OpenStreetMap",
"template": "http://{t}.tile.openstreetmap.org/{z}/{x}/{y}.png",
"description": "The default OpenStreetMap layer.",
"scaleExtent": [
0,
18
],
"subdomains": [
"a",
"b",
"c"
]
},
{
"name": " TIGER 2012 Roads Overlay",
"template": "http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
[
-124.81,
24.055
],
[
-66.865,
49.386
]
]
},
{
"name": " TIGER 2012 Roads Overlay",
"template": "http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
[
-179.754,
50.858
],
[
-129.899,
71.463
]
]
},
{
"name": " TIGER 2012 Roads Overlay",
"template": "http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
[
-174.46,
18.702
],
[
-154.516,
26.501
]
]
},
{
"name": " USGS Topographic Maps",
"template": "http://{t}.tile.openstreetmap.us/usgs_scanned_topos/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
[
-125.991,
24.005
],
[
-65.988,
50.009
]
]
},
{
"name": " USGS Topographic Maps",
"template": "http://{t}.tile.openstreetmap.us/usgs_scanned_topos/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
[
-160.579,
18.902
],
[
-154.793,
22.508
]
]
},
{
"name": " USGS Topographic Maps",
"template": "http://{t}.tile.openstreetmap.us/usgs_scanned_topos/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
[
-178.001,
51.255
],
[
-130.004,
71.999
]
]
},
{
"name": " USGS Large Scale Aerial Imagery",
"template": "http://{t}.tile.openstreetmap.us/usgs_large_scale/{z}/{x}/{y}.jpg",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
[
-124.819,
24.496
],
[
-66.931,
49.443
]
]
},
{
"name": "British Columbia bc_mosaic",
"template": "http://{t}.imagery.paulnorman.ca/tiles/bc_mosaic/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c",
"d"
],
"extent": [
[
-123.441,
48.995
],
[
-121.346,
50.426
]
],
"sourcetag": "bc_mosaic",
"terms_url": "http://imagery.paulnorman.ca/tiles/about.html"
},
{
"name": "OS OpenData Streetview",
"template": "http://os.openstreetmap.org/sv/{z}/{x}/{y}.png",
"extent": [
[
-8.72,
49.86
],
[
1.84,
60.92
]
],
"sourcetag": "OS_OpenData_StreetView"
},
{
"name": "OS OpenData Locator",
"template": "http://tiles.itoworld.com/os_locator/{z}/{x}/{y}.png",
"extent": [
[
-9,
49.8
],
[
1.9,
61.1
]
],
"sourcetag": "OS_OpenData_Locator"
},
{
"name": "OS 1:25k historic (OSM)",
"template": "http://ooc.openstreetmap.org/os1/{z}/{x}/{y}.jpg",
"extent": [
[
-9,
49.8
],
[
1.9,
61.1
]
],
"sourcetag": "OS 1:25k"
},
{
"name": "OS 1:25k historic (NLS)",
"template": "http://geo.nls.uk/mapdata2/os/25000/{z}/{x}/{y}.png",
"extent": [
[
-9,
49.8
],
[
1.9,
61.1
]
],
"sourcetag": "OS 1:25k",
"logo": "icons/logo_nls70-nq8.png",
"logo_url": "http://geo.nls.uk/maps/"
},
{
"name": "OS 7th Series historic (OSM)",
"template": "http://ooc.openstreetmap.org/os7/{z}/{x}/{y}.jpg",
"extent": [
[
-9,
49.8
],
[
1.9,
61.1
]
],
"sourcetag": "OS7"
},
{
"name": "OS 7th Series historic (NLS)",
"template": "http://geo.nls.uk/mapdata2/os/seventh/{z}/{x}/{y}.png",
"extent": [
[
-9,
49.8
],
[
1.9,
61.1
]
],
"sourcetag": "OS7",
"logo": "icons/logo_nls70-nq8.png",
"logo_url": "http://geo.nls.uk/maps/"
},
{
"name": "OS New Popular Edition historic",
"template": "http://ooc.openstreetmap.org/npe/{z}/{x}/{y}.png",
"extent": [
[
-5.8,
49.8
],
[
1.9,
55.8
]
],
"sourcetag": "NPE"
},
{
"name": "OS Scottish Popular historic",
"template": "http://ooc.openstreetmap.org/npescotland/tiles/{z}/{x}/{y}.jpg",
"extent": [
[
-7.8,
54.5
],
[
-1.1,
61.1
]
],
"sourcetag": "NPE"
},
{
"name": "Surrey aerial",
"template": "http://gravitystorm.dev.openstreetmap.org/surrey/{z}/{x}/{y}.png",
"extent": [
[
-0.856,
51.071
],
[
0.062,
51.473
]
],
"sourcetag": "Surrey aerial"
},
{
"name": "Haiti - GeoEye Jan 13",
"template": "http://gravitystorm.dev.openstreetmap.org/imagery/haiti/{z}/{x}/{y}.jpg",
"extent": [
[
-74.5,
17.95
],
[
-71.58,
20.12
]
],
"sourcetag": "Haiti GeoEye"
},
{
"name": "Haiti - GeoEye Jan 13+",
"template": "http://maps.nypl.org/tilecache/1/geoeye/{z}/{x}/{y}.jpg",
"extent": [
[
-74.5,
17.95
],
[
-71.58,
20.12
]
],
"sourcetag": "Haiti GeoEye"
},
{
"name": "Haiti - DigitalGlobe",
"template": "http://maps.nypl.org/tilecache/1/dg_crisis/{z}/{x}/{y}.jpg",
"extent": [
[
-74.5,
17.95
],
[
-71.58,
20.12
]
],
"sourcetag": "Haiti DigitalGlobe"
},
{
"name": "Haiti - Street names",
"template": "http://hypercube.telascience.org/tiles/1.0.0/haiti-city/{z}/{x}/{y}.jpg",
"extent": [
[
-74.5,
17.95
],
[
-71.58,
20.12
]
],
"sourcetag": "Haiti streetnames"
},
{
"name": "NAIP",
"template": "http://cube.telascience.org/tilecache/tilecache.py/NAIP_ALL/{z}/{x}/{y}.png",
"description": "National Agriculture Imagery Program",
"extent": [
[
-125.8,
24.2
],
[
-62.3,
49.5
]
],
"sourcetag": "NAIP"
},
{
"name": "NAIP",
"template": "http://cube.telascience.org/tilecache/tilecache.py/NAIP_ALL/{z}/{x}/{y}.png",
"description": "National Agriculture Imagery Program",
"extent": [
[
-168.5,
55.3
],
[
-140,
71.5
]
],
"sourcetag": "NAIP"
},
{
"name": "Ireland - NLS Historic Maps",
"template": "http://geo.nls.uk/maps/ireland/gsgs4136/{z}/{x}/{y}.png",
"extent": [
[
-10.71,
51.32
],
[
-5.37,
55.46
]
],
"sourcetag": "NLS Historic Maps",
"logo": "icons/logo_nls70-nq8.png",
"logo_url": "http://geo.nls.uk/maps/"
},
{
"name": "Denmark - Fugro Aerial Imagery",
"template": "http://tile.openstreetmap.dk/fugro2005/{z}/{x}/{y}.jpg",
"extent": [
[
7.81,
54.44
],
[
15.49,
57.86
]
],
"sourcetag": "Fugro (2005)"
},
{
"name": "Denmark - Stevns Kommune",
"template": "http://tile.openstreetmap.dk/stevns/2009/{z}/{x}/{y}.jpg",
"extent": [
[
12.09144,
55.23403
],
[
12.47712,
55.43647
]
],
"sourcetag": "Stevns Kommune (2009)"
},
{
"name": "Austria - geoimage.at",
"template": "http://geoimage.openstreetmap.at/4d80de696cd562a63ce463a58a61488d/{z}/{x}/{y}.jpg",
"extent": [
[
9.36,
46.33
],
[
17.28,
49.09
]
],
"sourcetag": "geoimage.at"
},
{
"name": "Russia - Kosmosnimki.ru IRS Satellite",
"template": "http://irs.gis-lab.info/?layers=irs&request=GetTile&z={z}&x={x}&y={y}",
"extent": [
[
19.02,
40.96
],
[
77.34,
70.48
]
],
"sourcetag": "Kosmosnimki.ru IRS"
},
{
"name": "Belarus - Kosmosnimki.ru SPOT4 Satellite",
"template": "http://irs.gis-lab.info/?layers=spot&request=GetTile&z={z}&x={x}&y={y}",
"extent": [
[
23.16,
51.25
],
[
32.83,
56.19
]
],
"sourcetag": "Kosmosnimki.ru SPOT4"
},
{
"name": "Australia - Geographic Reference Image",
"template": "http://agri.openstreetmap.org/{z}/{x}/{y}.png",
"extent": [
[
96,
-44
],
[
168,
-9
]
],
"sourcetag": "AGRI"
},
{
"name": "Switzerland - Canton Aargau - AGIS 25cm 2011",
"template": "http://tiles.poole.ch/AGIS/OF2011/{z}/{x}/{y}.png",
"extent": [
[
7.69,
47.13
],
[
8.48,
47.63
]
],
"sourcetag": "AGIS OF2011"
},
{
"name": "Switzerland - Canton Solothurn - SOGIS 2007",
"template": "http://mapproxy.sosm.ch:8080/tiles/sogis2007/EPSG900913/{z}/{x}/{y}.png?origin=nw",
"extent": [
[
7.33,
47.06
],
[
8.04,
47.5
]
],
"sourcetag": "Orthofoto 2007 WMS Solothurn"
},
{
"name": "Poland - Media-Lab fleet GPS masstracks",
"template": "http://masstracks.media-lab.com.pl/{z}/{x}/{y}.png",
"extent": [
[
14,
48.9
],
[
24.2,
55
]
],
"sourcetag": "masstracks"
},
{
"name": "South Africa - CD:NGI Aerial",
"template": "http://{t}.aerial.openstreetmap.org.za/ngi-aerial/{z}/{x}/{y}.jpg",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
[
17.64,
-34.95
],
[
32.87,
-22.05
]
],
"sourcetag": "ngi-aerial"
}
];
+337 -225
View File
@@ -1,7 +1,13 @@
[
{
"name": "Bing aerial imagery",
"url": "http://ecn.t0.tiles.virtualearth.net/tiles/a{q}uadkey.jpeg?g=587&mkt=en-gb&n=z",
"template": "http://ecn.t0.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z",
"description": "Satellite imagery.",
"scaleExtent": [
0,
20
],
"default": "yes",
"sourcetag": "Bing",
"logo": "bing_maps.png",
"logo_url": "http://www.bing.com/maps",
@@ -9,7 +15,12 @@
},
{
"name": "MapBox Satellite",
"url": "http://{t}.tiles.mapbox.com/v3/openstreetmap.map-4wvf9l0l/{z}/{x}/{y}.png",
"template": "http://{t}.tiles.mapbox.com/v3/openstreetmap.map-4wvf9l0l/{z}/{x}/{y}.png",
"description": "Satellite and aerial imagery",
"scaleExtent": [
0,
16
],
"subdomains": [
"a",
"b",
@@ -17,12 +28,13 @@
]
},
{
"name": "MapQuest Open Aerial",
"url": "http://oatile1.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg"
},
{
"name": "OSM - Mapnik",
"url": "http://{t}.tile.openstreetmap.org/{z}/{x}/{y}.png",
"name": "OpenStreetMap",
"template": "http://{t}.tile.openstreetmap.org/{z}/{x}/{y}.png",
"description": "The default OpenStreetMap layer.",
"scaleExtent": [
0,
18
],
"subdomains": [
"a",
"b",
@@ -30,151 +42,141 @@
]
},
{
"name": "OSM - OpenCycleMap",
"url": "http://tile.opencyclemap.org/cycle/{z}/{x}/{y}.png"
},
{
"name": "OSM - MapQuest",
"url": "http://otile1.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg"
},
{
"name": "OSM - Tiger Edited Map",
"url": "http://tiger-osm.mapquest.com/tiles/1.0.0/tiger/{z}/{x}/{y}.png",
"extent": [
24.055,
-124.81,
49.386,
-66.865
]
},
{
"name": "OSM - Tiger Edited Map",
"url": "http://tiger-osm.mapquest.com/tiles/1.0.0/tiger/{z}/{x}/{y}.png",
"extent": [
50.858,
-179.754,
71.463,
-129.899
]
},
{
"name": "OSM - Tiger Edited Map",
"url": "http://tiger-osm.mapquest.com/tiles/1.0.0/tiger/{z}/{x}/{y}.png",
"extent": [
18.702,
-174.46,
26.501,
-154.516
]
},
{
"name": "OSM US TIGER 2012 Roads Overlay",
"url": "http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png",
"name": " TIGER 2012 Roads Overlay",
"template": "http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
24.055,
-124.81,
49.386,
-66.865
[
-124.81,
24.055
],
[
-66.865,
49.386
]
]
},
{
"name": "OSM US TIGER 2012 Roads Overlay",
"url": "http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png",
"name": " TIGER 2012 Roads Overlay",
"template": "http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
50.858,
-179.754,
71.463,
-129.899
[
-179.754,
50.858
],
[
-129.899,
71.463
]
]
},
{
"name": "OSM US TIGER 2012 Roads Overlay",
"url": "http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png",
"name": " TIGER 2012 Roads Overlay",
"template": "http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
18.702,
-174.46,
26.501,
-154.516
[
-174.46,
18.702
],
[
-154.516,
26.501
]
]
},
{
"name": "OSM US USGS Topographic Maps",
"url": "http://{t}.tile.openstreetmap.us/usgs_scanned_topos/{z}/{x}/{y}.png",
"name": " USGS Topographic Maps",
"template": "http://{t}.tile.openstreetmap.us/usgs_scanned_topos/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
24.005,
-125.991,
50.009,
-65.988
[
-125.991,
24.005
],
[
-65.988,
50.009
]
]
},
{
"name": "OSM US USGS Topographic Maps",
"url": "http://{t}.tile.openstreetmap.us/usgs_scanned_topos/{z}/{x}/{y}.png",
"name": " USGS Topographic Maps",
"template": "http://{t}.tile.openstreetmap.us/usgs_scanned_topos/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
18.902,
-160.579,
22.508,
-154.793
[
-160.579,
18.902
],
[
-154.793,
22.508
]
]
},
{
"name": "OSM US USGS Topographic Maps",
"url": "http://{t}.tile.openstreetmap.us/usgs_scanned_topos/{z}/{x}/{y}.png",
"name": " USGS Topographic Maps",
"template": "http://{t}.tile.openstreetmap.us/usgs_scanned_topos/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
51.255,
-178.001,
71.999,
-130.004
[
-178.001,
51.255
],
[
-130.004,
71.999
]
]
},
{
"name": "OSM US USGS Large Scale Aerial Imagery",
"url": "http://{t}.tile.openstreetmap.us/usgs_large_scale/{z}/{x}/{y}.jpg",
"name": " USGS Large Scale Aerial Imagery",
"template": "http://{t}.tile.openstreetmap.us/usgs_large_scale/{z}/{x}/{y}.jpg",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
24.496,
-124.819,
49.443,
-66.931
[
-124.819,
24.496
],
[
-66.931,
49.443
]
]
},
{
"name": "British Columbia bc_mosaic",
"url": "http://{t}.imagery.paulnorman.ca/tiles/bc_mosaic/{z}/{x}/{y}.png",
"template": "http://{t}.imagery.paulnorman.ca/tiles/bc_mosaic/{z}/{x}/{y}.png",
"subdomains": [
"a",
"b",
@@ -182,55 +184,75 @@
"d"
],
"extent": [
48.995,
-123.441,
50.426,
-121.346
[
-123.441,
48.995
],
[
-121.346,
50.426
]
],
"sourcetag": "bc_mosaic",
"terms_url": "http://imagery.paulnorman.ca/tiles/about.html"
},
{
"name": "OS OpenData Streetview",
"url": "http://os.openstreetmap.org/sv/{z}/{x}/{y}.png",
"template": "http://os.openstreetmap.org/sv/{z}/{x}/{y}.png",
"extent": [
49.86,
-8.72,
60.92,
1.84
[
-8.72,
49.86
],
[
1.84,
60.92
]
],
"sourcetag": "OS_OpenData_StreetView"
},
{
"name": "OS OpenData Locator",
"url": "http://tiles.itoworld.com/os_locator/{z}/{x}/{y}.png",
"template": "http://tiles.itoworld.com/os_locator/{z}/{x}/{y}.png",
"extent": [
49.8,
-9,
61.1,
1.9
[
-9,
49.8
],
[
1.9,
61.1
]
],
"sourcetag": "OS_OpenData_Locator"
},
{
"name": "OS 1:25k historic (OSM)",
"url": "http://ooc.openstreetmap.org/os1/{z}/{x}/{y}.jpg",
"template": "http://ooc.openstreetmap.org/os1/{z}/{x}/{y}.jpg",
"extent": [
49.8,
-9,
61.1,
1.9
[
-9,
49.8
],
[
1.9,
61.1
]
],
"sourcetag": "OS 1:25k"
},
{
"name": "OS 1:25k historic (NLS)",
"url": "http://geo.nls.uk/mapdata2/os/25000/{z}/{x}/{y}.png",
"template": "http://geo.nls.uk/mapdata2/os/25000/{z}/{x}/{y}.png",
"extent": [
49.8,
-9,
61.1,
1.9
[
-9,
49.8
],
[
1.9,
61.1
]
],
"sourcetag": "OS 1:25k",
"logo": "icons/logo_nls70-nq8.png",
@@ -238,23 +260,31 @@
},
{
"name": "OS 7th Series historic (OSM)",
"url": "http://ooc.openstreetmap.org/os7/{z}/{x}/{y}.jpg",
"template": "http://ooc.openstreetmap.org/os7/{z}/{x}/{y}.jpg",
"extent": [
49.8,
-9,
61.1,
1.9
[
-9,
49.8
],
[
1.9,
61.1
]
],
"sourcetag": "OS7"
},
{
"name": "OS 7th Series historic (NLS)",
"url": "http://geo.nls.uk/mapdata2/os/seventh/{z}/{x}/{y}.png",
"template": "http://geo.nls.uk/mapdata2/os/seventh/{z}/{x}/{y}.png",
"extent": [
49.8,
-9,
61.1,
1.9
[
-9,
49.8
],
[
1.9,
61.1
]
],
"sourcetag": "OS7",
"logo": "icons/logo_nls70-nq8.png",
@@ -262,111 +292,153 @@
},
{
"name": "OS New Popular Edition historic",
"url": "http://ooc.openstreetmap.org/npe/{z}/{x}/{y}.png",
"template": "http://ooc.openstreetmap.org/npe/{z}/{x}/{y}.png",
"extent": [
49.8,
-5.8,
55.8,
1.9
[
-5.8,
49.8
],
[
1.9,
55.8
]
],
"sourcetag": "NPE"
},
{
"name": "OS Scottish Popular historic",
"url": "http://ooc.openstreetmap.org/npescotland/tiles/{z}/{x}/{y}.jpg",
"template": "http://ooc.openstreetmap.org/npescotland/tiles/{z}/{x}/{y}.jpg",
"extent": [
54.5,
-7.8,
61.1,
-1.1
[
-7.8,
54.5
],
[
-1.1,
61.1
]
],
"sourcetag": "NPE"
},
{
"name": "Surrey aerial",
"url": "http://gravitystorm.dev.openstreetmap.org/surrey/{z}/{x}/{y}.png",
"template": "http://gravitystorm.dev.openstreetmap.org/surrey/{z}/{x}/{y}.png",
"extent": [
51.071,
-0.856,
51.473,
0.062
[
-0.856,
51.071
],
[
0.062,
51.473
]
],
"sourcetag": "Surrey aerial"
},
{
"name": "Haiti - GeoEye Jan 13",
"url": "http://gravitystorm.dev.openstreetmap.org/imagery/haiti/{z}/{x}/{y}.jpg",
"template": "http://gravitystorm.dev.openstreetmap.org/imagery/haiti/{z}/{x}/{y}.jpg",
"extent": [
17.95,
-74.5,
20.12,
-71.58
[
-74.5,
17.95
],
[
-71.58,
20.12
]
],
"sourcetag": "Haiti GeoEye"
},
{
"name": "Haiti - GeoEye Jan 13+",
"url": "http://maps.nypl.org/tilecache/1/geoeye/{z}/{x}/{y}.jpg",
"template": "http://maps.nypl.org/tilecache/1/geoeye/{z}/{x}/{y}.jpg",
"extent": [
17.95,
-74.5,
20.12,
-71.58
[
-74.5,
17.95
],
[
-71.58,
20.12
]
],
"sourcetag": "Haiti GeoEye"
},
{
"name": "Haiti - DigitalGlobe",
"url": "http://maps.nypl.org/tilecache/1/dg_crisis/{z}/{x}/{y}.jpg",
"template": "http://maps.nypl.org/tilecache/1/dg_crisis/{z}/{x}/{y}.jpg",
"extent": [
17.95,
-74.5,
20.12,
-71.58
[
-74.5,
17.95
],
[
-71.58,
20.12
]
],
"sourcetag": "Haiti DigitalGlobe"
},
{
"name": "Haiti - Street names",
"url": "http://hypercube.telascience.org/tiles/1.0.0/haiti-city/{z}/{x}/{y}.jpg",
"template": "http://hypercube.telascience.org/tiles/1.0.0/haiti-city/{z}/{x}/{y}.jpg",
"extent": [
17.95,
-74.5,
20.12,
-71.58
[
-74.5,
17.95
],
[
-71.58,
20.12
]
],
"sourcetag": "Haiti streetnames"
},
{
"name": "National Agriculture Imagery Program",
"url": "http://cube.telascience.org/tilecache/tilecache.py/NAIP_ALL/{z}/{x}/{y}.png",
"name": "NAIP",
"template": "http://cube.telascience.org/tilecache/tilecache.py/NAIP_ALL/{z}/{x}/{y}.png",
"description": "National Agriculture Imagery Program",
"extent": [
24.2,
-125.8,
49.5,
-62.3
[
-125.8,
24.2
],
[
-62.3,
49.5
]
],
"sourcetag": "NAIP"
},
{
"name": "National Agriculture Imagery Program",
"url": "http://cube.telascience.org/tilecache/tilecache.py/NAIP_ALL/{z}/{x}/{y}.png",
"name": "NAIP",
"template": "http://cube.telascience.org/tilecache/tilecache.py/NAIP_ALL/{z}/{x}/{y}.png",
"description": "National Agriculture Imagery Program",
"extent": [
55.3,
-168.5,
71.5,
-140
[
-168.5,
55.3
],
[
-140,
71.5
]
],
"sourcetag": "NAIP"
},
{
"name": "Ireland - NLS Historic Maps",
"url": "http://geo.nls.uk/maps/ireland/gsgs4136/{z}/{x}/{y}.png",
"template": "http://geo.nls.uk/maps/ireland/gsgs4136/{z}/{x}/{y}.png",
"extent": [
51.32,
-10.71,
55.46,
-5.37
[
-10.71,
51.32
],
[
-5.37,
55.46
]
],
"sourcetag": "NLS Historic Maps",
"logo": "icons/logo_nls70-nq8.png",
@@ -374,116 +446,156 @@
},
{
"name": "Denmark - Fugro Aerial Imagery",
"url": "http://tile.openstreetmap.dk/fugro2005/{z}/{x}/{y}.jpg",
"template": "http://tile.openstreetmap.dk/fugro2005/{z}/{x}/{y}.jpg",
"extent": [
54.44,
7.81,
57.86,
15.49
[
7.81,
54.44
],
[
15.49,
57.86
]
],
"sourcetag": "Fugro (2005)"
},
{
"name": "Denmark - Stevns Kommune",
"url": "http://tile.openstreetmap.dk/stevns/2009/{z}/{x}/{y}.jpg",
"template": "http://tile.openstreetmap.dk/stevns/2009/{z}/{x}/{y}.jpg",
"extent": [
55.23403,
12.09144,
55.43647,
12.47712
[
12.09144,
55.23403
],
[
12.47712,
55.43647
]
],
"sourcetag": "Stevns Kommune (2009)"
},
{
"name": "Austria - geoimage.at",
"url": "http://geoimage.openstreetmap.at/4d80de696cd562a63ce463a58a61488d/{z}/{x}/{y}.jpg",
"template": "http://geoimage.openstreetmap.at/4d80de696cd562a63ce463a58a61488d/{z}/{x}/{y}.jpg",
"extent": [
46.33,
9.36,
49.09,
17.28
[
9.36,
46.33
],
[
17.28,
49.09
]
],
"sourcetag": "geoimage.at"
},
{
"name": "Russia - Kosmosnimki.ru IRS Satellite",
"url": "http://irs.gis-lab.info/?layers=irs&request=GetTile&z={z}&x={x}&y={y}",
"template": "http://irs.gis-lab.info/?layers=irs&request=GetTile&z={z}&x={x}&y={y}",
"extent": [
40.96,
19.02,
70.48,
77.34
[
19.02,
40.96
],
[
77.34,
70.48
]
],
"sourcetag": "Kosmosnimki.ru IRS"
},
{
"name": "Belarus - Kosmosnimki.ru SPOT4 Satellite",
"url": "http://irs.gis-lab.info/?layers=spot&request=GetTile&z={z}&x={x}&y={y}",
"template": "http://irs.gis-lab.info/?layers=spot&request=GetTile&z={z}&x={x}&y={y}",
"extent": [
51.25,
23.16,
56.19,
32.83
[
23.16,
51.25
],
[
32.83,
56.19
]
],
"sourcetag": "Kosmosnimki.ru SPOT4"
},
{
"name": "Australia - Geographic Reference Image",
"url": "http://agri.openstreetmap.org/{z}/{x}/{y}.png",
"template": "http://agri.openstreetmap.org/{z}/{x}/{y}.png",
"extent": [
-44,
96,
-9,
168
[
96,
-44
],
[
168,
-9
]
],
"sourcetag": "AGRI"
},
{
"name": "Switzerland - Canton Aargau - AGIS 25cm 2011",
"url": "http://tiles.poole.ch/AGIS/OF2011/{z}/{x}/{y}.png",
"template": "http://tiles.poole.ch/AGIS/OF2011/{z}/{x}/{y}.png",
"extent": [
47.13,
7.69,
47.63,
8.48
[
7.69,
47.13
],
[
8.48,
47.63
]
],
"sourcetag": "AGIS OF2011"
},
{
"name": "Switzerland - Canton Solothurn - SOGIS 2007",
"url": "http://mapproxy.sosm.ch:8080/tiles/sogis2007/EPSG900913/{z}/{x}/{y}.png?origin=nw",
"template": "http://mapproxy.sosm.ch:8080/tiles/sogis2007/EPSG900913/{z}/{x}/{y}.png?origin=nw",
"extent": [
47.06,
7.33,
47.5,
8.04
[
7.33,
47.06
],
[
8.04,
47.5
]
],
"sourcetag": "Orthofoto 2007 WMS Solothurn"
},
{
"name": "Poland - Media-Lab fleet GPS masstracks",
"url": "http://masstracks.media-lab.com.pl/{z}/{x}/{y}.png",
"template": "http://masstracks.media-lab.com.pl/{z}/{x}/{y}.png",
"extent": [
48.9,
14,
55,
24.2
[
14,
48.9
],
[
24.2,
55
]
],
"sourcetag": "masstracks"
},
{
"name": "South Africa - CD:NGI Aerial",
"url": "http://{t}.aerial.openstreetmap.org.za/ngi-aerial/{z}/{x}/{y}.jpg",
"template": "http://{t}.aerial.openstreetmap.org.za/ngi-aerial/{z}/{x}/{y}.jpg",
"subdomains": [
"a",
"b",
"c"
],
"extent": [
-34.95,
17.64,
-22.05,
32.87
[
17.64,
-34.95
],
[
32.87,
-22.05
]
],
"sourcetag": "ngi-aerial"
}
+49 -7
View File
@@ -5,17 +5,58 @@ $ = 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(),
url: $(this).find('url').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.url = im.url
im.template = im.template
.replace('$quadkey', '{u}')
.replace(/\$(\w)/g, function(m) {
return '{' + m[1] + '}';
})
@@ -28,13 +69,13 @@ $('set').each(function(i) {
if (elem.attr('minlat')) {
im.extent = [
+elem.attr('minlat'),
+elem.attr('minlon'),
+elem.attr('maxlat'),
+elem.attr('maxlon')];
[+elem.attr('minlon'),
+elem.attr('minlat')],
[+elem.attr('maxlon'),
+elem.attr('maxlat')]];
}
['sourcetag', 'logo', 'logo_url', 'terms_url'].forEach(function(a) {
['default', 'sourcetag', 'logo', 'logo_url', 'terms_url'].forEach(function(a) {
if (elem.find(a).length) {
im[a] = elem.find(a).first().text();
}
@@ -43,3 +84,4 @@ $('set').each(function(i) {
});
fs.writeFileSync('imagery.json', JSON.stringify(imagery, null, 4));
fs.writeFileSync('imagery.js', 'iD.data.imagery = ' + JSON.stringify(imagery, null, 4) + ';');
+5 -2
View File
@@ -32,12 +32,17 @@
<script src='js/id/oauth.js'></script>
<script src='js/id/services/taginfo.js'></script>
<script src='data/data.js'></script>
<script src='data/deprecated.js'></script>
<script src='data/imagery.js'></script>
<script src="js/id/geo.js"></script>
<script src="js/id/geo/extent.js"></script>
<script src='js/id/renderer/background.js'></script>
<script src='js/id/renderer/background_source.js'></script>
<script src='js/id/renderer/map.js'></script>
<script src='js/id/renderer/layers.js'></script>
<script src="js/id/svg.js"></script>
<script src="js/id/svg/areas.js"></script>
@@ -136,8 +141,6 @@
<script src='locale/locale.js'></script>
<script src='locale/en.js'></script>
<script src='data/data.js'></script>
<script src='data/deprecated.js'></script>
</head>
<body>
<div id='iD'></div><script>
+3 -1
View File
@@ -93,7 +93,9 @@ window.iD = function () {
};
context.background()
.source(iD.BackgroundSource.Bing);
.source(_.find(iD.layers, function(l) {
return l.data.name === 'Bing aerial imagery';
}));
return d3.rebind(context, dispatch, 'on');
};
+11 -26
View File
@@ -1,8 +1,7 @@
iD.BackgroundSource = {};
// derive the url of a 'quadkey' style tile from a coordinate object
iD.BackgroundSource.template = function(template, subdomains, scaleExtent) {
scaleExtent = scaleExtent || [0, 18];
iD.BackgroundSource.template = function(data) {
var generator = function(coord) {
var u = '';
for (var zoom = coord[2]; zoom > 0; zoom--) {
@@ -12,19 +11,17 @@ iD.BackgroundSource.template = function(template, subdomains, scaleExtent) {
if ((coord[1] & mask) !== 0) byte += 2;
u += byte.toString();
}
// distribute requests against multiple domains
var t = subdomains ?
subdomains[coord[2] % subdomains.length] : '';
return template
.replace('{t}', t)
return data.template
.replace('{t}', data.subdomains ?
data.subdomains[coord[2] % data.subdomains.length] : '')
.replace('{u}', u)
.replace('{x}', coord[0])
.replace('{y}', coord[1])
.replace('{z}', coord[2]);
};
generator.scaleExtent = scaleExtent;
generator.template = template;
generator.data = data;
return generator;
};
@@ -32,21 +29,9 @@ iD.BackgroundSource.template = function(template, subdomains, scaleExtent) {
iD.BackgroundSource.Custom = function() {
var template = window.prompt('Enter a tile template. Valid tokens are {z}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme.');
if (!template) return null;
return iD.BackgroundSource.template(template, null, [0, 20]);
return iD.BackgroundSource.template({
template: template,
name: 'Custom (customized)'
});
};
iD.BackgroundSource.Bing = iD.BackgroundSource.template(
'http://ecn.t{t}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z',
[0, 1, 2, 3], [0, 20]);
iD.BackgroundSource.Tiger2012 = iD.BackgroundSource.template(
'http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png',
['a', 'b', 'c'], [0, 17]);
iD.BackgroundSource.OSM = iD.BackgroundSource.template(
'http://{t}.tile.openstreetmap.org/{z}/{x}/{y}.png',
['a', 'b', 'c'], [0, 18]);
iD.BackgroundSource.MapBox = iD.BackgroundSource.template(
'http://{t}.tiles.mapbox.com/v3/openstreetmap.map-4wvf9l0l/{z}/{x}/{y}.jpg70',
['a', 'b', 'c'], [0, 16]);
iD.BackgroundSource.Custom.data = { 'name': 'Custom' };
+15
View File
@@ -0,0 +1,15 @@
iD.layers = iD.data.imagery.map(iD.BackgroundSource.template);
iD.layers.push((function() {
function custom() {
var template = window.prompt('Enter a tile template. Valid tokens are {z}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme.');
if (!template) return null;
if (template.match(/google/g)) return null;
return iD.BackgroundSource.template({
template: template,
name: 'Custom (customized)'
});
}
custom.data = { name: 'Custom' };
return custom;
})());
+3 -2
View File
@@ -161,8 +161,9 @@ iD.ui = function(context) {
var imagery = linkList.append('li').attr('id', 'attribution');
imagery.append('span').text('imagery');
imagery.append('a').attr('target', '_blank')
.attr('href', 'http://opengeodata.org/microsoft-imagery-details').text(' provided by bing');
imagery
.append('span')
.attr('class', 'provided-by');
linkList.append('li').attr('class', 'source-switch').append('a').attr('href', '#')
.text('dev')
+81 -62
View File
@@ -1,31 +1,17 @@
iD.ui.layerswitcher = function(context) {
var event = d3.dispatch('cancel', 'save'),
sources = [{
name: 'Bing',
source: iD.BackgroundSource.Bing,
description: 'Satellite imagery.',
link: 'http://opengeodata.org/microsoft-imagery-details'
}, {
name: 'TIGER 2012',
source: iD.BackgroundSource.Tiger2012,
description: 'Public domain road data from the US Government.'
}, {
name: 'OSM',
source: iD.BackgroundSource.OSM,
description: 'The default OpenStreetMap layer.',
link: 'http://www.openstreetmap.org/'
}, {
name: 'MapBox',
source: iD.BackgroundSource.MapBox,
description: 'Satellite and aerial imagery.',
link: 'http://mapbox.com'
}, {
name: 'Custom',
source: iD.BackgroundSource.Custom,
description: 'A custom layer (requires configuration).'
}],
opacities = [1, 0.5, 0];
var layers = iD.layers;
function getSources() {
var ext = context.map().extent();
return layers.filter(function(layer) {
return !layer.data.extent ||
iD.geo.Extent(layer.data.extent).intersects(ext);
});
}
function layerswitcher(selection) {
var content = selection
@@ -52,7 +38,7 @@ iD.ui.layerswitcher = function(context) {
selection.on('click.layerswitcher-inside', function() {
return d3.event.stopPropagation();
});
d3.select('body').on('click.layerswitcher-outside', hide);
context.container().on('click.layerswitcher-outside', hide);
}
var opa = content
@@ -64,6 +50,17 @@ iD.ui.layerswitcher = function(context) {
var opacityList = opa.append('ul')
.attr('class', 'opacity-options');
function setOpacity(d) {
context.map().tilesurface
.transition()
.style('opacity', d)
.attr('data-opacity', d);
opacityList.selectAll('li')
.classed('selected', false);
d3.select(this)
.classed('selected', true);
}
opacityList.selectAll('div.opacity')
.data(opacities)
.enter()
@@ -71,69 +68,91 @@ iD.ui.layerswitcher = function(context) {
.attr('data-original-title', function(d) {
return t('layerswitcher.percent_brightness', { opacity: (d * 100) });
})
.on('click.set-opacity', function(d) {
context.map().tilesurface
.transition()
.style('opacity', d)
.attr('data-opacity', d);
opacityList.selectAll('li')
.classed('selected', false);
d3.select(this)
.classed('selected', true);
})
.on('click.set-opacity', setOpacity)
.html("<div class='select-box'></div>")
.call(bootstrap.tooltip().placement('top'))
.append('div')
.attr('class', 'opacity')
.style('opacity', function(d) {
return d;
});
.style('opacity', String);
// Make sure there is an active selection by default
d3.select('.opacity-options li:nth-child(2)').classed('selected', true);
opa.select('.opacity-options li:nth-child(2)').classed('selected', true);
function selectLayer(d) {
content.selectAll('a.layer')
.classed('selected', function(d) {
return d.source === context.background().source();
return d === context.background().source();
});
d3.select('#attribution a')
.attr('href', d.link)
.text('provided by ' + d.name);
var provided_by = context.container().select('#attribution .provided-by')
.html('');
if (d.data.terms_url) {
provided_by.append('a')
.attr('href', (d.data.terms_url || ''))
.classed('disabled', !d.data.terms_url)
.text(' provided by ' + (d.data.sourcetag || d.data.name));
} else {
provided_by
.text(' provided by ' + (d.data.sourcetag || d.data.name));
}
}
content
function clickSetSource(d) {
d3.event.preventDefault();
if (d.data.name === 'Custom') {
var configured = d();
if (!configured) return;
d = configured;
}
context.background().source(d);
if (d.data.name === 'Custom (customized)') {
context.history()
.imagery_used('Custom (' + d.data.template + ')');
} else {
context.history()
.imagery_used(d.data.sourcetag || d.data.name);
}
context.redraw();
selectLayer(d);
}
var layerList = content
.append('ul')
.attr('class', 'toggle-list fillL')
.selectAll('a.layer')
.data(sources)
.enter()
.attr('class', 'toggle-list fillL');
function update() {
var layerLinks = layerList.selectAll('a.layer')
.data(getSources(), function(d) {
return d.data.name;
});
layerLinks.exit().remove();
layerLinks.enter()
.append('li')
.append('a')
.attr('data-original-title', function(d) {
return d.description;
return d.data.description || '';
})
.attr('href', '#')
.attr('class', 'layer')
.text(function(d) {
return d.name;
return d.data.name;
})
.call(bootstrap.tooltip().placement('right'))
.on('click.set-source', function(d) {
d3.event.preventDefault();
if (d.name === 'Custom') {
var configured = d.source();
if (!configured) return;
d.source = configured;
d.name = 'Custom (' + d.source.template + ')';
.each(function(d) {
// only set tooltips for layers with tooltips
if (d.data.description) {
d3.select(this).call(bootstrap.tooltip().placement('right'));
}
context.background().source(d.source);
context.history().imagery_used(d.name);
context.redraw();
selectLayer(d);
})
.on('click.set-source', clickSetSource)
.insert('span')
.attr('class','icon toggle');
selectLayer(context.background().source());
}
context.map().on('move.layerswitcher-update', _.debounce(update, 1000));
var adjustments = content
.append('div')
+5 -2
View File
@@ -35,12 +35,17 @@
<script src='../js/id/oauth.js'></script>
<script src='../js/id/services/taginfo.js'></script>
<script src='../data/data.js'></script>
<script src='../data/deprecated.js'></script>
<script src='../data/imagery.js'></script>
<script src="../js/id/geo.js"></script>
<script src="../js/id/geo/extent.js"></script>
<script src='../js/id/renderer/background.js'></script>
<script src='../js/id/renderer/background_source.js'></script>
<script src='../js/id/renderer/map.js'></script>
<script src='../js/id/renderer/layers.js'></script>
<script src="../js/id/svg.js"></script>
<script src="../js/id/svg/areas.js"></script>
@@ -131,8 +136,6 @@
<script src='../locale/locale.js'></script>
<script src='../locale/en.js'></script>
<script src='../data/data.js'></script>
<script src='../data/deprecated.js'></script>
<script src="spec/spec_helpers.js"></script>
+4 -10
View File
@@ -27,27 +27,21 @@ describe('iD.Background', function() {
});
});
describe('iD.BackgroundSource.Bing', function() {
it('generates tiles', function() {
expect(iD.BackgroundSource.Bing([0,0,0])).to.equal('http://ecn.t0.tiles.virtualearth.net/tiles/a.jpeg?g=587&mkt=en-gb&n=z');
});
});
describe('iD.BackgroundSource.Template', function() {
it('does not error with blank template', function() {
var source = iD.BackgroundSource.template('');
var source = iD.BackgroundSource.template({ template: '' });
expect(source([0,1,2])).to.equal('');
});
it('generates a tile-generating source', function() {
var source = iD.BackgroundSource.template('{z}/{x}/{y}');
var source = iD.BackgroundSource.template({ template: '{z}/{x}/{y}' });
expect(source([0,1,2])).to.equal('2/0/1');
});
it('supports subdomains', function() {
var source = iD.BackgroundSource.template('{t}/{z}/{x}/{y}', ['apples', 'oranges']);
var source = iD.BackgroundSource.template({ template: '{t}/{z}/{x}/{y}', subdomains: ['apples', 'oranges'] });
expect(source([0,1,2])).to.equal('apples/2/0/1');
});
it('distributes requests between subdomains', function() {
var source = iD.BackgroundSource.template('{t}/{z}/{x}/{y}', ['apples', 'oranges']);
var source = iD.BackgroundSource.template({ template: '{t}/{z}/{x}/{y}', subdomains: ['apples', 'oranges'] });
expect(source([0,1,1])).to.equal('oranges/1/0/1');
});
});