将纬度,经度和zoomLevel转换为latitudeDelta和longitudeDelta

时间:2017-10-21 07:38:36

标签: javascript reactjs google-maps react-native latitude-longitude

我有缩放级别zoom=Z和位置latitude=xlongitude=y,但我需要使用latitudelongitude,{{设置区域1}}和latitudeDelta

我找到了图片

enter image description here

解释longitudeDeltalatitudeDelta的工作原理以及公式

longitudeDelta

但是如何将缩放级别zoom = Math.round(Math.log(360 / region.longitudeDelta) / Math.LN2 转换为zoom=ZlatitudeDelta

我猜我只需要设置longitudeDeltalatitudeDelta,然后根据屏幕尺寸计算其他值?

2 个答案:

答案 0 :(得分:1)

因此,让您的zoom公式取决于longitudeDelta,我们可以表示 longitudeDelta并附有一些基本的数学规则:

enter image description here

通过这种方式,我们将zoom转换为longitudeDelta。 要找到latitudeDelta,可以使用不同的方法。我更喜欢找到longitudeDeltalatitudeDelta之间的系数,无论缩放级别如何,该系数始终相同。这是我编写的示例代码。我省略了将缩放级别四舍五入为整数以表明计算正确的方法。

// Initial values
var latitudeDelta = 0.004757;
var longitudeDelta = 0.006866; 

var coef = latitudeDelta / longitudeDelta; // always the same no matter your zoom

// Find zoom level
var zoomLvlCalculated = calcZoom(longitudeDelta);
console.log(zoomLvlCalculated); // 15.678167523696594

// Find longitudeDelta based on the found zoom  
var longitudeDeltaCalculated = calcLongitudeDelta(zoomLvlCalculated);
console.log(calcLongitudeDelta(zoomLvlCalculated));// 0.006865999999999988 which is the same like the initial longitudeDelta, if we omit the floating point calc difference

// Find the latitudeDelta with the coefficient
var latitudeDeltaCalculated = longitudeDeltaCalculated * coef;
console.log(latitudeDeltaCalculated); //0.004756999999999992 which is the same like the initial latitudeDelta, if we omit the floating point calc difference

function calcZoom(longitudeDelta) {
    // Omit rounding intentionally for the example
    return Math.log(360 / longitudeDelta) / Math.LN2;
}

function calcLongitudeDelta(zoom) {
    var power = Math.log2(360) - zoom;
    return Math.pow(2, power);
}

P.S。由于Internet Explorer不支持以2为底的日志,因此您可以使用以下公式以不同的底数(e)进行计算:

enter image description here

答案 1 :(得分:1)

我知道这很旧,但您可以从 onRegionChange() 传递的 Region 道具中获取 latDelta 和 longDelta;

const [latDelta, setlatDelta] = useState('');  //latitudeDelta stored in latDelta
const [lngDelta, setlngDelta] = useState('');  //longitudeDelta stored in lngDelta


const getCoordinates = (Region) => {
  
  setlatDelta(Region.latitudeDelta);  //store varable into latDelta
  setLngDelta(Region.longitudeDelta); //store variable into lngDelta

} 

<MapView>
  onRegionChange = {(Region) => getCoordinates(Region);}
</MapView>