【发布时间】:2017-04-17 17:11:44
【问题描述】:
我需要将(谷歌地图)边界对象转换为区域对象。
样本边界:
{
northeast: {
lat: 47.5085913,
lng: 19.2656781
},
southwest: {
lat: 47.4179006,
lng: 19.0494985
}
}
示例区域:
{
// centre of bounds
latitude,
longitude,
// delta of the centre in order to fit the original bounds
latitudeDelta,
longitudeDelta,
}
到目前为止我所取得的成就:
const bounds2region = bounds => {
const earthRadiusInKM = 6371 // km
const radiusInKM = 1
const aspectRatio = 1
const [ latitude, longitude ] = bounds2center(bounds)
const radiusInRad = radiusInKM / earthRadiusInKM
const longitudeDelta = rad2deg(radiusInRad / Math.cos(deg2rad(latitude)))
const latitudeDelta = aspectRatio * rad2deg(radiusInRad)
return {
latitude,
longitude,
latitudeDelta,
longitudeDelta,
}
}
const bounds2center = bounds =>
toArrayIfObject(bounds)
.reduce((coordinate1, coordinate2) => {
const c1 = toArrayIfObject(coordinate1)
const c2 = toArrayIfObject(coordinate2)
return [
average([c1[0], c2[0]]),
average([c1[1], c2[1]]),
]
})
const average = numbers => numbers.reduce((sum, n) => sum + n, 0) / numbers.length
const deg2rad = n => n * Math.PI / 180
const rad2deg = n => n / Math.PI * 180
const toArrayIfObject = object => typeof object === 'object' ? Object.values(object) : object
它部分工作:它将地图移动到边界的中心,但裁剪或缩小太多。我不确定如何设置增量(latitudeDelta、longitudeDelta)。我想我需要为aspectRatio 计算一个值,而不是将其设置为1。
【问题讨论】:
标签: google-maps geolocation maps