React native MapView: что такое latitudeDelta longitudeDelta

В примере с реагировать на родной mapview у них есть latitudeDelta и longitudeDelta. Это равно высоте и ширине? А в каком блоке? Согласно их комментарию GitHub, он говорит

Расстояние между минимальной и максимальной широтой/долготой для отображения.

Но это не поможет мне. Я хочу знать, что пользователь видит на карте.

Ответ 1

Я также приехал сюда, потому что я не мог найти хорошую документацию, и Гуглинг не помог. Из моих собственных исследований:

Для вычисления размера карты используется только одна из значений latitudeDelta или longitudeDelta. Он берет большую из двух в соответствии со следующей формулой и игнорирует другую. Это делается для того, чтобы не растягивать карту.

  1. Карта имеет размер в соответствии с шириной и высотой, указанными в стилях и/или рассчитанными по реакции-native.
  2. Карта вычисляет два значения: longitudeDelta/width и latitudeDelta/height, сравнивает эти 2 вычисленных значения и берет большую из двух.
  3. Карта масштабируется в соответствии со значением, выбранным на шаге 2, а другое значение игнорируется.
    • Если выбранным значением является longitudeDelta, то левым краем является longitude - longitudeDelta а правый край - longitude + longitudeDelta. Верх и низ - это любые значения, необходимые для заполнения высоты без растягивания карты.
    • Если выбранным значением является latitudeDelta, то нижний край - latitude - latitudeDelta а верхний край - latitude + latitudeDelta. Левая и правая - любые значения, необходимые для заполнения ширины без растяжения карты.

Вот некоторые примеры:

// this uses latitudeDelta because 0.04/300 > 0.05/600
<MapView
  style={{width: 600, height: 300}}
  region={{
    latitude: 31.776685,
    longitude: 35.234491,
    latitudeDelta: 0.04,
    longitudeDelta: 0.05,
  }}
/>



// this uses longitudeDelta because 0.05/600 > 0/myVar when myVar > 0
<MapView
  style={{width: 600, height: myVar}}
  region={{
    latitude: 40.689220,
    longitude: -74.044502,
    latitudeDelta: 0,
    longitudeDelta: 0.05,
  }}
/>

Ответ 2

Я нашел это в руководстве разработчика Apple

Величина расстояния восток-запад (измеряется в градусах) для отображения для области карты. Количество километров, охватываемых долготным диапазоном, зависит от текущей широты. Например, один градус долготы охватывает расстояние около 111 километров (69 миль) на экваторе, но сокращается до 0 километров на полюсах.

In в GitHub тоже есть проблема для этой библиотеки, которая была решена
https://github.com/react-community/react-native-maps/issues/637

это визуальное объяснение также поможет fooobar.com/questions/1247327/...
в этой статье Википедии показано, как рассчитать точное значение
https://en.wikipedia.org/wiki/Latitude#Length_of_a_degree_of_latitude

Ответ 3

Тебе нужно

"centroid": {
    "latitude": "24.2472",
    "longitude": "89.920914"
},
"boundingBox": {
    "southWest": {
        "latitude": "24.234631",
        "longitude": "89.907127"
    },
    "northEast": {
        "latitude": "24.259769",
        "longitude": "89.934692"
    }
}

или аналогичные данные для правильного расчета latitudeDelta и longitudeDelta.

Ниже приведен демо-код для реагировать/реагировать на родной.

componentDidMount() {
    const { width, height } = Dimensions.get('window');
    const ASPECT_RATIO = width / height;

    const lat = parseFloat(centroid.latitude);
    const lng = parseFloat(centroid.longitude);
    const northeastLat = parseFloat(boundingBox.northEast.latitude);
    const southwestLat = parseFloat(boundingBox.southWest.latitude);
    const latDelta = northeastLat - southwestLat;
    const lngDelta = latDelta * ASPECT_RATIO;

    this.setState({
      region: {
        latitude: lat,
        longitude: lng,
        latitudeDelta: latDelta,
        longitudeDelta: lngDelta
      }
    })     
}