【问题标题】:Mapbox geocoding search result in infobox信息框中的 Mapbox 地理编码搜索结果
【发布时间】:2020-07-28 14:48:36
【问题描述】:

我想创建一个地图,每次用户使用地理编码器进行搜索时,地图顶部都会出现一个信息框,其中包含地理编码结果(点)下方的瓦片集的属性。每次使用地理编码器时,我都能够触发弹出窗口,并且每当我使用“map.queryRenderedFeatures”单击地图上的任何位置时都能成功地使信息框出现,但尝试将两者结合起来并不成功。似乎 map.queryRenderedFeatures 不喜欢使用地理编码中的坐标(geometry.coordinates)。谁能帮帮我?

<script>
    mapboxgl.accessToken = 'xxxxx';
    var map = new mapboxgl.Map({
    container: 'map',
    style: 'xxxxx',
    center: [-95.925, 29.575],
    zoom: 7
    });


  var businessgeocoder = new MapboxGeocoder({
    accessToken: mapboxgl.accessToken,
    zoom: 15,
    placeholder: 'Business location',
     marker: {
     color: 'red'
     },
    mapboxgl: mapboxgl
    })


  map.addControl(businessgeocoder);


 map.on('load', function() {
      businessgeocoder.on('result', function(resultinfobox) {
          
          
          var point = map.project([resultinfobox.result.center[0], resultinfobox.result.center[1]]); 
                  console.log([resultinfobox.result.center[0], resultinfobox.result.center[1]])
                  console.log(point)
          var test = map.queryRenderedFeatures(point, {
              layers: ['tract-4332-1sbuyl','blockgroups-4332-9mehvk'] 
              });
              if (!test.length) {
                 return;
                 }
               var censustracts = test[0];
               var censusblockgroups = test[1];
              
              console.log(censusblockgroups.properties.LMIPerc)
      });
    });
    

  
  
  map.on('click', function(clickinfobox) {
  var features = map.queryRenderedFeatures(clickinfobox.point, {
                 layers: ['tract-4332-1sbuyl','blockgroups-4332-9mehvk'] 
                 });

  if (!features.length) {
    return;
  }

  var censustract = features[0];
  var censusblockgroup = features[1];
  var popup = new mapboxgl.Popup({ offset: [0, -15] })
    .setLngLat(clickinfobox.lngLat)
    .setHTML('<h4>' + censustract.properties.CountyName + '</h4><h4>' + censustract.properties.NAMELSAD + '</h4><h4>' + censusblockgroup.properties.NAMELSAD + '</h4>' +
             '<table><tr><th></th><th>CT</th><th>BG</th></tr><tr><td>Poverty Rate</td><td>' 
             + censustract.properties.PovRate + "%" + '</td><td>' 
             + censusblockgroup.properties.PovRate + "%" + '</td></tr><tr><td>LMI</td><td>' 
             + censustract.properties.LMIPerc + "%" + '</td><td>' + censusblockgroup.properties.LMIPerc + "%" + '</td></tr></table>'
            )
    .addTo(map);
  });  
    

</script>

【问题讨论】:

    标签: jquery mapbox geocoding mapbox-gl-js mapbox-gl


    【解决方案1】:

    我已经陷入这个陷阱很多次了。

    map.queryRenderedFeatures() 采用 屏幕 坐标,以 像素 为单位。不是以为单位的地理坐标。

    您可以使用map.project(result.geometry.coordinates)获取屏幕坐标。

    【讨论】:

    • 非常感谢您!这对了解很有帮助。但是...我使用了它,但仍然无法正常工作...请参阅上面的编辑...
    • 您需要提出具体的问题,并展示您尝试过的内容以及失败的具体内容。不是“它仍然不起作用”。
    • 这就是我向您推荐代码的原因,因为它更准确地展示了我所做的尝试。阅读您的评论后,我创建了一个变量 >>> point = map.project([resultinfobox.result.center[0], resultinfobox.result.center[1]]);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多