我如何根据地图的DeltaLatitude知道当前是否在查看地图中的某个点?

时间:2019-01-31 09:12:56

标签: google-maps react-native google-maps-api-3

我需要知道用户当前是否在浏览地图上的某个位置, 例如我有一点
{latititude:40,longtitude:32}

地图的视图由
{latitude: 32,longtitude:44, latitudeDelta:0.003,longtitudeDelta:0.005}

当地图放大和缩小时,唯一的数据差异是latitudeDelta和longtitudeDelta

最终,当我越来越放大时,地图上的点将不再可见

有人可以帮助我进行此计算吗?

1 个答案:

答案 0 :(得分:0)

我无法为您提供编码解决方案,但您可以:

从三角形(从地图的2个角度)获取直径:

const diameter = Math.floor((location.latitudeDelta * 40008000) / 360)

然后计算两个位置之间的距离:

function distance(lon1, lat1, lon2, lat2) {
  const R = 6371 // Radius of the earth in km
  const dLat = (lat2 - lat1).toRad() // Javascript functions in radians
  const dLon = (lon2 - lon1).toRad()
  const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
          Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
          Math.sin(dLon / 2) * Math.sin(dLon / 2)
  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
  const d = R * c // Distance in km
  return d
}
// add this if toRad is undefined
if (typeof (Number.prototype.toRad) === 'undefined') {
  Number.prototype.toRad = function() {
    return this * Math.PI / 180
  }
}

然后加上直径和距离:

if ((diameter / 2) > distance) {
  console.log('The location in in the map')
}