/* Copyright (c) 2017 Jean-Marc VIGLINO,
released under the CeCILL-B license (French BSD license)
(http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).
@classdesc
ol_source_Mapillary is a source that load Mapillary's geotagged photos in a vector layer.
Inherits from:
*/
import {bbox as ol_loadingstrategy_bbox} from 'ol/loadingstrategy.js'
import ol_source_Vector from 'ol/source/Vector.js'
import {transformExtent as ol_proj_transformExtent} from 'ol/proj.js'
import ol_ext_Ajax from '../util/Ajax.js';
/** Mapillary test (not tested)
* @constructor ol_source_Mapillary
* @extends {ol_source_Vector}
* @param {olx.source.Mapillary=} options
*/
var ol_source_Mapillary = class olsourceMapillary extends ol_source_Vector {
constructor(opt_options) {
var options = opt_options || {};
options.loader = function(extent, resolution, projection) {
return this._loaderFn(extent, resolution, projection);
}
/** Default attribution */
if (!options.attributions) options.attributions = ["© Mapillary"];
// Bbox strategy : reload at each move
if (!options.strategy) options.strategy = ol_loadingstrategy_bbox;
// Init parent
super(options);
/** Max resolution to load features */
this._maxResolution = options.maxResolution || 100;
/** Query limit */
this._limit = options.limit || 100;
// Client ID
// this.set("clientId", options.clientId);
}
/** Decode wiki attributes and choose to add feature to the layer
* @param {feature} the feature
* @param {attributes} wiki attributes
* @return {boolean} true: add the feature to the layer
* @API stable
*/
readFeature( /*feature, attributes*/) {
return true;
}
/** Loader function used to load features.
* @private
*/
_loaderFn(extent, resolution, projection) {
if (resolution > this._maxResolution)
return;
var bbox = ol_proj_transformExtent(extent, projection, "EPSG:4326");
// Commons API: for more info @see https://www.mapillary.com/developer
var date = Date.now() - 6 * 30 * 24 * 60 * 60 * 1000;
var url = "https://a.mapillary.com/v2/search/im?client_id="
+ this.get('clientId')
+ "&max_lat=" + bbox[3]
+ "&max_lon=" + bbox[2]
+ "&min_lat=" + bbox[1]
+ "&min_lon=" + bbox[0]
+ "&limit=" + (this._limit - 1)
+ "&start_time=" + date;
// Ajax request to get the tile
ol_ext_Ajax.get(
{
url: url,
dataType: 'jsonp',
success: function (data) {
console.log(data);
/*
var features = [];
var att, pt, feature, lastfeature = null;
if (data.query && data.query.pages) return;
for ( var i in data.query.pages)
{ att = data.query.pages[i];
if (att.coordinates && att.coordinates.length )
{ pt = [att.coordinates[0].lon, att.coordinates[0].lat];
}
else
{ var meta = att.imageinfo[0].metadata;
if (!meta)
{ //console.log(att);
continue;
}
pt = [];
for (var k=0; k