反应原生MapView:什么是latitudeDelta longitudeDelta

问题描述 投票:9回答:3

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

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

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

react-native react-native-maps
3个回答
14
投票

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

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

  1. 地图的大小根据样式中指定的宽度和高度和/或由react-native计算。
  2. 地图计算两个值,longitudeDelta/widthlatitudeDelta/height,比较这两个计算值,并取两者中较大的一个。
  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,
  }}
/>

5
投票

在苹果开发者指南中

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

在GitHub中也有一个问题,那个已经解决的库 https://github.com/react-community/react-native-maps/issues/637

在这篇维基百科文章中,它展示了如何计算精确值 https://en.wikipedia.org/wiki/Latitude#Length_of_a_degree_of_latitude


0
投票

你需要

"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
      }
    })     
}
© www.soinside.com 2019 - 2024. All rights reserved.