Как я могу узнать, просматривается ли в данный момент точка на карте, основываясь на DeltaLatitude карты? - PullRequest
0 голосов
/ 31 января 2019

Мне нужно знать, является ли местоположение на карте текущим для просмотра пользователем, например, у меня есть точка <br/>{latititude:40,longtitude:32}

И вид карты сделан из <br/>{latitude: 32,longtitude:44, latitudeDelta:0.003,longtitudeDelta:0.005}

При увеличении и уменьшении карты единственная разница в данных - это latitudeDelta и longtitudeDelta

В конечном итоге, когда я буду увеличивать масштаб, точка на карте больше не будет видна

Может кто-нибудь помочь мне построить этот расчет, это будет очень полезно

1 Ответ

0 голосов
/ 31 января 2019

Я не могу дать вам кодовое решение, но вы можете:

получить диаметр из дельты (из двух углов карты):

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')
}
...