Mapbox: идентифицируйте слои набора листов с помощью queryRenderedFeatures () и объектов ответа геокодирования - PullRequest
0 голосов
/ 05 августа 2020

Мне трудно получить то, что я считал «простой» задачей, для работы в течение некоторого времени. Я хотел бы найти адрес и запустить «идентификацию» (здесь я использую специальный термин ArcGIS c) с координатами ответа. Я использую queryRenderedFeatures () и для этого конвертирую координаты широты и долготы в пиксельные координаты (см. Три строки ниже).

          coordinates = [obj.result.center[0], obj.result.center[1]];
          screenpoint = map.project(coordinates);
          pointformat = mapboxgl.Point(screenpoint);

Однако запрос выполняется некорректно. Я получаю ответ, но они из разных мест. Ответ будет отображаться только при втором поиске (после refre sh и первого поиска адреса ничего не отображается), но даже в этом случае содержимое ответа неверно. Я реорганизовал код, чтобы посмотреть, был ли это вопрос порядка и событий, но без изменений. Я был бы очень признателен за любое предложение. Пожалуйста, дайте мне знать, если что-то неясно. Кроме того, я пытался объединить код, чтобы в нем могли быть опечатки, но на самом деле я пытаюсь понять содержимое и лог c внутри «функции geocodeInfobox (obj)».

    var map;
    var businessgeocoder;
    
    var coordinates;
    var screenpoint;
    var pointformat;
    var test;
    var features;
    var popup;




    function initialize() {
        businessgeocoder = new MapboxGeocoder({
                              accessToken: mapboxgl.accessToken,
                              flyTo: {
                                     speed: 100
                              },
                              zoom: 15,
                              placeholder: 'Business location',
                              mapboxgl: mapboxgl
    })
                                        
        // adds the address searchboxes
        map.addControl(businessgeocoder);

        businessgeocoder.on('result', geocodeInfobox);  
    }


    function geocodeInfobox (obj) {
          coordinates = [obj.result.center[0], obj.result.center[1]];
          screenpoint = map.project(coordinates);
          pointformat = mapboxgl.Point(screenpoint);
         
          
          test = map.queryRenderedFeatures(pointformat, {
              layers: ['tract-4332-1sbuyl','blockgroups-4332-9mehvk'] 
              });

              if (!test.length) {
                 return;
                 }
         
              var censustract1 = test[0];
              var censusblockgroup1 = test[1];
              
              console.log(censustract1.properties.CountyName + 
                          censustract1.properties.NAMELSAD + censusblockgroup1.properties.NAMELSAD)

    }



    mapboxgl.accessToken = 'pk.eyJ1Ijoia3l1bmdhaGxpbSIsImEiOiJjanJyejQyeHUyNGwzNGFuMzdzazh1M2k1In0.TcQEe2aebuQZ4G7d827A9Q';
    
    map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/kyungahlim/ckd226uao1p7i1iqo8ag2ewmu',
    center: [-95.925, 29.575],
    zoom: 7
    });
    
    


 map.on('load', initialize); 
...