add support for displaying esri metadata

This commit is contained in:
jgravois
2017-09-09 21:59:07 -07:00
parent 9750fa4d82
commit 7521369ece
3 changed files with 56 additions and 25 deletions
+1
View File
@@ -278,6 +278,7 @@ en:
title: Background
zoom: Zoom
vintage: Vintage
source: Source
unknown: Unknown
show_tiles: Show Tiles
hide_tiles: Hide Tiles
+40 -24
View File
@@ -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;
+15 -1
View File
@@ -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);
}
});
}