【问题标题】:Mabox-gl-js Marker translated positionMapbox-gl-js Marker 翻译位置
【发布时间】:2018-11-15 08:16:32
【问题描述】:

我正在尝试使用https://www.mapbox.com/mapbox-gl-js/api/#marker

const el = document.createElement('div');
el.className = 'marker';

const marker = new mapboxgl.Marker(el, {
  color: '#FFFFFF',
  draggable: true,
  offset: [0, 0],
})
  .setLngLat([0, 0])
  .addTo(this.map);

与地图相关的:

this.map = new mapboxgl.Map({
  container: this.mapEl,
  center: [this.props.longitude, this.props.latitude],
  zoom: this.props.zoom,
  maxZoom: 17,
  pitch: this.props.pitch || 0,
  bearing: this.props.bearing || 0,
  style: getStyleByTheme(this.props.theme),
  preserveDrawingBuffer: true,
  attributionControl: false,
});

问题是标记位置正在被“翻译”为巨大的值:transform: translate(-50%, -50%) translate(225173px, 75290px);

通过调试这个计算,我发现问题出现在这一行:https://github.com/mapbox/mapbox-gl-js/blob/e0c4d4679d06be7c0f51970b26a184f8d9ed6d5b/src/ui/marker.js#L338

所以我更进一步:

this.map.project(marker.getLngLat())._add(marker.getOffset())

返回{x: 225173.2033574923, y: 75289.74831606582}

通过删除函数_add 调用并输出this.map.project(marker.getLngLat()) 的值,我得到了相同的值。

所以,这实际上发生在这里:https://github.com/mapbox/mapbox-gl-js/blob/e0c4d4679d06be7c0f51970b26a184f8d9ed6d5b/src/ui/map.js#L616

这将我引向https://github.com/mapbox/mapbox-gl-js/blob/7b4be8d247c7351df83316eed0f8d20d3a184722/src/geo/transform.js#L314

天哪,我现在迷路了

这可能是什么问题?是 Mapbox-gl-js、我的地图设置还是事件 html 结构?

请帮忙。 :)

【问题讨论】:

    标签: javascript mapbox-gl-js mapbox-marker


    【解决方案1】:

    好的,我想通了——这完全是我的错!

    正如这里的文档所说 - https://www.mapbox.com/mapbox-gl-js/api/#map#project "返回一个点,表示像素坐标,相对于地图的容器,对应于指定的地理位置。"

    我使用的是.setLngLat([0, 0]),但地图实际上指向不同的位置。

    通过使用与地图居中相同的 LngLat,我解决了这个问题。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-20
      • 2017-01-26
      • 2016-06-05
      • 2017-04-24
      • 2020-07-17
      • 2022-11-17
      • 2020-02-09
      • 2016-07-07
      相关资源
      最近更新 更多