OpenLayer 3 - GeoJSON - функция нулевая - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь получить строку страны по координатам, но функция равна нулю.

Почему функция равна нулю?как я могу это исправить?

Я протестировал с onclick event.pixel , и он возвращает функцию, но затем я использую map.getPixelFromCoordinate , чтобы получить pixel функция обнуляется

var vectorLayer = new ol.layer.Vector({
    source: new ol.source.Vector({
        url: 'https://openlayers.org/en/v4.6.5/examples/data/geojson/countries.geojson',
        format: new ol.format.GeoJSON()
    })
});

var map = new ol.Map({
    layers: [ vectorLayer],
    target: 'map',
    view: new ol.View({
        center: [0, 0],
        zoom: 1
    }),
    logo:false
  });

это не работает

map.once('postrender', function() {
    var pixel = map.getPixelFromCoordinate([-0.0508, 51.5160]);

    var feature = map.forEachFeatureAtPixel(pixel, function(feature) { 
        return feature;
    });

    console.log("Country:"+feature.get("name"));
});

1 Ответ

0 голосов
/ 01 июня 2018

Это связано с тем, что к моменту вызова события postrender загрузка функций еще не завершена.Вы можете использовать postcompose событие вместо vectorLayer.Если функция будет более сложной, я бы порекомендовал использовать функцию s *1007* loader .

vectorLayer.on('postcompose', function () {
    var pixel = map.getPixelFromCoordinate(ol.proj.fromLonLat([-0.0508, 51.5160]));
    var feature = map.forEachFeatureAtPixel(pixel, function (feature) {
        return feature;
    });
    console.log("Country:"+feature.get("name"));
});

Также вы, похоже, передаете EPSG:4326 координаты, которые необходимо преобразовать вEPSG:3857 (который используется OpenLayers по умолчанию).

...