Что у меня есть: Geoserver 2.13.2 с расширениями netcdf
Веб-карта Openlayers
Я могу использовать файл netcdf как изображение поверх wms на карту
https://i.imgur.com/UtnNU8V.png
Я создаю WMS-слой с
function CreateWMSLayer(name, url) {
varname = name.split(":")[1];
window[varname] = new ol.layer.Tile({
name: varname,
visible: true,
source: new ol.source.TileWMS({
url: url,
params: {'FORMAT': format,
'VERSION': '1.3.0',
tiled: true,
LAYERS: name,
crossOrigin: 'anonymous'
}
})
});
}
CreateWMSLayer('clmnc:CCLM5km_ERA_FF_10M_1991_2000_lonlat_ymonmean', https://url/geoserver/wms)
Я получаю событие нажатия
function getValueMouseClick(evt) {
document.getElementById('info').innerHTML = '';
var viewResolution = (view.getResolution());
var lala = eval(document.getElementById("LAYERS").value);
//lala = 'CCLM5km_ERA_FF_10M_1991_2000_lonlat_ymonmean'
var url = lala.getSource().getGetFeatureInfoUrl(
evt.coordinate, viewResolution, 'EPSG:3857',
{'INFO_FORMAT': 'application/json' });
wmspagedata = [];
$.getJSON(url, function (data) {
for (var key in data.features[0].properties) {
wmspagedata = data.features[0].properties[key]
};
if (url) {
document.getElementById('info').innerHTML =
'<span>' + wmspagedata.toFixed(2) + '</span>';
}
});
}
URL, который я получаю для getJSON, выглядит следующим образом, когда я нажимаю накарта на моем изображении:
https://url/geoserver/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&QUERY_LAYERS=clmnc%3ACCLM5km_ERA_FF_10M_1991_2000_lonlat_ymonmean&tiled=true&LAYERS=clmnc%3ACCLM5km_ERA_FF_10M_1991_2000_lonlat_ymonmean&crossOrigin=anonymous&INFO_FORMAT=application%2Fjson&BBOX=0%2C0%2C20037508.342789244%2C20037508.342789244&I=9&J=174&WIDTH=256&HEIGHT=256&CRS=EPSG%3A3857&STYLES=
Вопрос и проблема: Насколько я понимаю:
bbox для всего мира (0,0,20037508.342789244,20037508.34278924).Openlayers создает изображение всего мира с 256x256, и я нажал на i = 9 j = 174 пикселя этого изображения.Но мое изображение находится только над westeurope. Смотри изображение
https://i.imgur.com/UtnNU8V.png
Как мне определить, что i и ji соответствуют пикселю в моем изображении.Потому что теперь я получаю только одно значение для группы пикселей, которые лежат внутри одной из плиток 256x256.
Если я сделаю руководство по URL для чего-то вроде (в WGS84, но оно работает)
https://url/geoserver/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&QUERY_LAYERS=clmnc%3ACCLM5km_ERA_FF_10M_1991_2000_lonlat_ymonmean&tiled=true&LAYERS=clmnc%3ACCLM5km_ERA_FF_10M_1991_2000_lonlat_ymonmean&crossOrigin=anonymous&INFO_FORMAT=application%2Fjson&WIDTH=450&HEIGHT=300&I=9&J=174&CRS=EPSG:4326&STYLES=&BBOX=44.22000167999778,-2.3199999520932644,56.22000076140847,15.67999984718909
Где я определяю ширину и высоту после netcdf и делаю ограничивающий прямоугольник в соответствии с GetCapabilties, я могу вручную изменить i и j и получить разные значения, как и ожидалось для каждого пикселя.Я пробовал что-то вроде
var url = lala.getSource().getGetFeatureInfoUrl(
evt.coordinate, viewResolution, 'EPSG:3857',
{'INFO_FORMAT': 'application/json',
'BBOX' : '4922548.0699,-258331.815256,6258381.85716,1767694.40537' ,
'WIDTH' : '450' ,
'HEIGHT': '300',
} ….
Но это не перезаписывает параметры URL.Если я ввожу BBOX2, он добавляет параметр правильно, но все равно добавляет BBOX по умолчанию (что является правильным поведением, поскольку bbox2 не определен)
Tl; dr: Как получить координаты Click, чтобы соответствовать моему изображению 450x300, чтобы получитьточные возвращаемые значения