Я написал функцию для получения пиксельных данных с карты открытых слоев:
var imagery = new ol.layer.Tile({
source: new ol.source.OSM(),
crossOrigin: 'anonymous'
});
var context;
/**
* Apply a filter on "postcompose" events.
*/
imagery.on('postcompose', function(event) {
context = event.context;
});
function getPixel( latitude, longitude ){
let lat = parseFloat( latitude );
let lon = parseFloat( longitude );
var coord = ol.proj.transform( [lon, lat], 'EPSG:4326', 'EPSG:3857' );
var pixel = map.getPixelFromCoordinate( coord );
if( context == null )
return;
return context.getImageData(pixel[0], pixel[1], 1, 1).data;
}
var map = new ol.Map({
target: 'map',
layers: [imagery],
...
});
Код основан на этой ссылке .Кроме того, преобразование данных LatLon в пиксельные координаты используется довольно широко и не создает никаких проблем.
Однако полученные пиксельные данные как-то смещены относительно координат, так что я вижу воду там, где естьземля и прочее.Насколько я могу судить, смещение составляет несколько сотен пикселей (или несколько метров в lonlat) в направлении x и y, и, вероятно, причина заключается в том, что пиксели на карте не соответствуют таковым на холсте.
Кто-нибудь знает, как решить эту проблему?