【问题标题】:React native MapView: what is latitudeDelta longitudeDeltaReact Native MapView:什么是latitudeDelta longitudeDelta
【发布时间】:2023-03-26 02:46:01
【问题描述】:

react native mapview 的示例中,它们有 latitudeDelta 和 longitudeDelta。它等于高度和宽度吗?在什么单位?根据他们的github comment ,它说

要显示的最小和最大纬度/经度之间的距离。

但这对我没有帮助。我想知道用户在地图上看到了什么。

【问题讨论】:

标签: react-native react-native-maps


【解决方案1】:

我也来到这里,因为我找不到任何好的文档,而谷歌搜索也没有帮助。以下是我自己的研究:

只有latitudeDeltalongitudeDelta 之一用于计算地图的大小。它根据以下公式取两者中的较大者并忽略另一个。这样做是为了避免拉伸地图。

  1. 地图的大小根据样式中指定的宽度和高度和/或由 react-native 计算得出。
  2. 地图计算两个值,longitudeDelta/widthlatitudeDelta/height,比较这两个计算值,并取两者中的较大者。
  3. 地图会根据步骤 2 中选择的值进行缩放,而忽略其他值。
    • 如果选择的值为longitudeDelta,则左边缘为longitude - longitudeDelta,右边缘为longitude + longitudeDelta。顶部和底部是填充高度而不拉伸地图所需的任何值。
    • 如果选择的值为latitudeDelta,则底边为latitude - latitudeDelta,顶边为latitude + latitudeDelta。 left 和 right 是在不拉伸地图的情况下填充宽度​​所需的任何值。

这里有一些例子:

// 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】:

    我在苹果开发者指南中找到了这个

    要为地图区域显示的东西距离量(以度为单位)。经度范围所跨越的公里数因当前纬度而异。例如,1 度经度在赤道处跨越大约 111 公里(69 英里)的距离,但在两极缩小到 0 公里。

    ? 该库在 GitHub 中也存在问题,已解决
    https://github.com/react-community/react-native-maps/issues/637

    这个视觉解释也有助于stackoverflow.com
    在这篇维基百科文章中,它展示了如何计算精确值
    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。

      下面是 react/react-native 的演示代码。

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

      【讨论】:

      • 我花了两个小时寻找这个答案。以northeastLat 减去southwestLat 效果很好。这需要在网络上更多地分享!非常感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      相关资源
      最近更新 更多