【发布时间】:2015-10-12 20:44:51
【问题描述】:
我正在尝试计算比例因子,以便在伪地图中粗略放置一些点。地图以某个(纬度,经度)点为中心。我要放置的点在一个设定距离d(半径)的区域内,也用经纬度表示。
现在我的问题是,为了让我在“地图”(固定尺寸的 SVG 元素)中缩放这些点的位置,我需要一个“比例因子”。例如,如果 SVG 元素代表一个半径为 5 公里的区域,而我的 SVG 是一个 500 像素的正方形,我该如何以 some 精度放置这些点? 一些精度就足够了,因为对于我的目标来说,假设一个完美的球形行星就足够了。
我提出这个问题的原因与here 解释的事实有关。据我了解,这意味着以纬度和经度表示的两点之间的小数差异在地球的不同区域会有所不同。
因此,如果我想知道how many pixels does 5km represent in this area of the globe 以便放置知道它们的纬度和经度的点,我该如何计算?
我现在只有这个公式来计算知道它们的纬度和经度的两点之间的距离:
function distance(lat1, lat2, lon1, lon2){
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d;
}
在给定点和距离的情况下,我可以更改它以告诉我小数差异(即纬度)吗?
【问题讨论】:
标签: javascript svg geospatial