Mapbox GL JS - 如何检查一个人是否在某个区域内,然后显示一条消息
Mapbox GL JS - How to check if a person is inside a certain area and then display a message if he is
我正在尝试使用 Mapbox GL JS 做一个功能,它会首先检测用户是否在某个位置,如果他显示 HTML 消息说他在位置。
我相信我必须利用 geolocatecontol 功能来检查用户的位置,然后使用边界框功能来确定用户是否在该位置内。问题是,我不知道该怎么做。任何帮助将不胜感激!
mapbox-gl-js 不会为您提供检查坐标是否位于边界框内的能力。我推荐使用 turf.js,它提供了很多地理辅助函数,例如booleanWithin(geometryA, geometryB)
编辑:mapbox-gl-js 实际上在LngLatBounds
class 上提供了一个contains(lngLat)
函数:https://docs.mapbox.com/mapbox-gl-js/api/#lnglatbounds#contains
如果你有一个简单的矩形边界框,你可以自己实现检查:
https://math.stackexchange.com/questions/190111/how-to-check-if-a-point-is-inside-a-rectangle
使用Geolocation.watchPosition()api浏览器的例子:
const southWest = new mapboxgl.LngLat(-2.488133, 53.747698);
const northEast = new mapboxgl.LngLat(-2.488156, 53.748530);
const bounds = new mapboxgl.LngLatBounds(southWest, northEast);
// called every time a new user position is determined
function checkUserPostion(position) {
const {latitude, longitude} = position.coords;
const isUserInBbx = bounds.contains([longitude, latitude]);
if (isUserInBbx) {
// update HTML
}
}
navigator.geolocation.watchPosition(checkUserPostion);
我正在尝试使用 Mapbox GL JS 做一个功能,它会首先检测用户是否在某个位置,如果他显示 HTML 消息说他在位置。
我相信我必须利用 geolocatecontol 功能来检查用户的位置,然后使用边界框功能来确定用户是否在该位置内。问题是,我不知道该怎么做。任何帮助将不胜感激!
mapbox-gl-js 不会为您提供检查坐标是否位于边界框内的能力。我推荐使用 turf.js,它提供了很多地理辅助函数,例如booleanWithin(geometryA, geometryB)
编辑:mapbox-gl-js 实际上在LngLatBounds
class 上提供了一个contains(lngLat)
函数:https://docs.mapbox.com/mapbox-gl-js/api/#lnglatbounds#contains
如果你有一个简单的矩形边界框,你可以自己实现检查:
https://math.stackexchange.com/questions/190111/how-to-check-if-a-point-is-inside-a-rectangle
使用Geolocation.watchPosition()api浏览器的例子:
const southWest = new mapboxgl.LngLat(-2.488133, 53.747698);
const northEast = new mapboxgl.LngLat(-2.488156, 53.748530);
const bounds = new mapboxgl.LngLatBounds(southWest, northEast);
// called every time a new user position is determined
function checkUserPostion(position) {
const {latitude, longitude} = position.coords;
const isUserInBbx = bounds.contains([longitude, latitude]);
if (isUserInBbx) {
// update HTML
}
}
navigator.geolocation.watchPosition(checkUserPostion);