mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-15 05:30:35 +02:00
add support for displaying esri metadata
This commit is contained in:
@@ -278,6 +278,7 @@ en:
|
||||
title: Background
|
||||
zoom: Zoom
|
||||
vintage: Vintage
|
||||
source: Source
|
||||
unknown: Unknown
|
||||
show_tiles: Show Tiles
|
||||
hide_tiles: Hide Tiles
|
||||
|
||||
@@ -232,6 +232,7 @@ rendererBackgroundSource.Bing = function(data, dispatch) {
|
||||
rendererBackgroundSource.Esri = function(data) {
|
||||
|
||||
// don't request blank tiles, instead overzoom real tiles - #4327
|
||||
// deprecated technique, but it works (for now)
|
||||
if (data.template.match(/blankTile/) === null) {
|
||||
data.template = data.template + '?blankTile=false';
|
||||
}
|
||||
@@ -240,12 +241,25 @@ rendererBackgroundSource.Esri = function(data) {
|
||||
cache = {};
|
||||
|
||||
esri.getVintage = function(center, tileCoord, callback) {
|
||||
var tileId = tileCoord.slice(0, 3).join('/');
|
||||
// FIXME: construct service URL
|
||||
// zoom = Math.min(tileCoord[2], esri.scaleExtent[1]),
|
||||
// centerPoint = center[1] + ',' + center[0], // lat,lng
|
||||
// url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint +
|
||||
// '?zl=' + zoom + '&key=' + key + '&jsonp={callback}';
|
||||
var tileId = tileCoord.slice(0, 3).join('/'),
|
||||
zoom = Math.min(tileCoord[2], esri.scaleExtent[1]),
|
||||
centerPoint = center[0] + ',' + center[1], // long, lat (as it should be)
|
||||
metadataLayer;
|
||||
switch (true) {
|
||||
case zoom >= 19:
|
||||
metadataLayer = 3;
|
||||
break;
|
||||
case zoom >= 17:
|
||||
metadataLayer = 2;
|
||||
break;
|
||||
case zoom >= 13:
|
||||
metadataLayer = 0;
|
||||
break;
|
||||
default:
|
||||
metadataLayer = 99;
|
||||
}
|
||||
// build up query using the layer appropriate to the current zoom
|
||||
var url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/' + metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json&callback={callback}';
|
||||
|
||||
if (!cache[tileId]) {
|
||||
cache[tileId] = {};
|
||||
@@ -254,24 +268,26 @@ rendererBackgroundSource.Esri = function(data) {
|
||||
return callback(null, cache[tileId].vintage);
|
||||
}
|
||||
|
||||
// FIXME: remove dummy result:
|
||||
callback(null, { start: null, end: null, range: '? - ?'});
|
||||
|
||||
// FIXME: call service instead:
|
||||
// jsonpRequest(url, function(result) {
|
||||
// var err = (!result && 'Unknown Error') || result.errorDetails;
|
||||
// if (err) {
|
||||
// return callback(err);
|
||||
// } else {
|
||||
// var vintage = {
|
||||
// start: localeDateString(result.resourceSets[0].resources[0].vintageStart),
|
||||
// end: localeDateString(result.resourceSets[0].resources[0].vintageEnd)
|
||||
// };
|
||||
// vintage.range = vintageRange(vintage);
|
||||
// cache[tileId].vintage = vintage;
|
||||
// return callback(null, vintage);
|
||||
// }
|
||||
// });
|
||||
// accurate metadata is only available at zoom 13 and closer
|
||||
if (metadataLayer === 99) {
|
||||
callback(null, { range: '', source: ' '});
|
||||
} else {
|
||||
jsonpRequest(url, function(result) {
|
||||
var err = !result || result.features.length < 1;
|
||||
if (err) {
|
||||
return callback(err);
|
||||
} else {
|
||||
var vintage = {
|
||||
// pass through the discrete capture date from metadata
|
||||
range: localeDateString(result.features[0].attributes.SRC_DATE2),
|
||||
source: result.features[0].attributes.NICE_DESC
|
||||
};
|
||||
|
||||
cache[tileId].vintage = vintage;
|
||||
return callback(null, vintage);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return esri;
|
||||
|
||||
@@ -8,7 +8,7 @@ export function uiPanelBackground(context) {
|
||||
var currSource = null;
|
||||
var currZoom = '';
|
||||
var currVintage = '';
|
||||
|
||||
var currEsriSource = '';
|
||||
|
||||
function redraw(selection) {
|
||||
if (currSource !== background.baseLayerSource().name()) {
|
||||
@@ -45,6 +45,14 @@ export function uiPanelBackground(context) {
|
||||
debouncedGetVintage(selection);
|
||||
}
|
||||
|
||||
if (currSource === 'Esri World Imagery') {
|
||||
list
|
||||
.append('li')
|
||||
.text(t('info_panels.background.source') + ': ')
|
||||
.append('span')
|
||||
.attr('class', 'source')
|
||||
.text(currEsriSource);
|
||||
}
|
||||
var toggle = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles';
|
||||
|
||||
selection
|
||||
@@ -78,6 +86,12 @@ export function uiPanelBackground(context) {
|
||||
currVintage = (result && result.range) || t('info_panels.background.unknown');
|
||||
selection.selectAll('.vintage')
|
||||
.text(currVintage);
|
||||
// metadata from Esri can tell us the specific provider
|
||||
if (result.source) {
|
||||
currEsriSource = result.source;
|
||||
selection.selectAll('.source')
|
||||
.text(currEsriSource);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user