Получение точных значений I и J из GetFeature / getGetFeatureInfoUrl для мозаичного изображения WMS - PullRequest
0 голосов
/ 10 октября 2018

Что у меня есть: 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, чтобы получитьточные возвращаемые значения

...