用经纬度大致计算距离
地球赤道上环绕地球一周走一圈共 40075.04公里
而一圈分成360°
而每1°(度)有60'
每一度一秒在赤道上的长度计算如下:
40075.04km/360°=111.31955km
111.31955km/60'=1.8553258km=1855.3m
而每一分又有60秒
每一秒就代表 1855.3m/60=30.92m
任意两点距离计算公式为
d=111.12cos{1/[sinΦAsinΦB十 cosΦAcosΦBcos(λB-λA)]}
其中:A点经度,纬度分别为λA和ΦA
B点的经度、纬度分别为λB和ΦB,d为距离
三、关于经纬度十进制表示法
对于两个点,在纬度相等的情况下:
经度每隔0.00001度,距离相差约1米;
每隔0.0001度,距离相差约10米;
每隔0.001度,距离相差约100米;每隔0.01度,距离相差约1000米;每隔0.1度,距离相差约10000米。
-- --- -- ------------ --------- ------------- ----------------- ------------ --------- ------------- ----------------- ------------ --------- ------------- ----------------- ------------
对于两个点,在经度相等的情况下:
纬度每隔0.00001度,距离相差约1.1米;每隔0.0001度,距离相差约11米;每隔0.001度,距离相差约111米;每隔0.01度,距离相差约1113米;每隔0.1度,距离相差约11132米。
==========整个BJ的区间 经纬度的差异,按照标准的算法,和模拟算法的差距是多少?
³ÇÊÐ | ¾¶È | ʱ²î | γ¶È |
ƽ¹È | 117.10 | ¼õ0Сʱ11·Ö36Ãë | 40.13 |
ÃÜÔÆ | 116.85 | ¼õ0Сʱ12·Ö36Ãë | 40.37 |
ͨÏØ | 116.67 | ¼õ0Сʱ13·Ö19Ãë | 39.92 |
˳Òå | 116.65 | ¼õ0Сʱ13·Ö24Ãë | 40.13 |
»³Èá | 116.62 | ¼õ0Сʱ13·Ö31Ãë | 40.32 |
±±¾© | 116.46 | ¼õ0Сʱ14·Ö10Ãë | 39.92 |
´óÐË | 116.33 | ¼õ0Сʱ14·Ö41Ãë | 39.73 |
²ýƽ | 116.20 | ¼õ0Сʱ15·Ö12Ãë | 40.22 |
·¿É½ | 115.98 | ¼õ0Сʱ16·Ö5Ãë | 39.72 |
ÑÓÇì | 115.97 | ¼õ0Сʱ16·Ö7Ãë | 40.47 |
http://wenku.baidu.com/view/ff6e702fccbff121dd3683d1.html
把经纬度投影到平面坐标系,然后计算两点间的直线距离,参考以上论文
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace testDistnace
{
class Program
{
//地球的子午线总长度大约40008km。平均:
//纬度1度 = 大约111km
//纬度1分 = 大约1.85km
//纬度1秒 = 大约30.9m
//经度 每隔0.1度,距离相差约10000米 latitude 纬度
static void Main(string[] args)
{
Console.WriteLine(Convert.ToString( GetDistance( 39, 116, 40.004, 117.02)));
Console.WriteLine("---- ----- ---- ---- ----");
Console.WriteLine(Convert.ToString( GetSimilarDistance(39, 116, 40.004, 117.02)));
Console.ReadLine();
}
public static double GetSimilarDistance(double lat1, double lng1, double lat2, double lng2)
{
return Math.Sqrt(Math.Abs(lat2 - lat1) * 111000 * Math.Abs(lat2 - lat1) * 111000 + Math.Abs(lng2 - lng1) * 100000 * Math.Abs(lng2 - lng1) * 100000);
}
private const double EARTH_RADIUS = 6378.137;//地球半径 千米
private static double rad(double d)
{
return d * Math.PI / 180.0;
}
public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) +
Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.Round(s * 10000) / 10000;
return s*1000;
}
}
}
=====
//Console.WriteLine(Convert.ToString( GetDistance( 39, 115.97, 40.004, 117.02)));
//Console.WriteLine("---- ----- ---- ---- ----");
//Console.WriteLine(Convert.ToString(GetSimilarDistance(39, 115.97, 40.004, 117.02)));
//100多公里差距 10公里
Console.WriteLine(Convert.ToString(GetDistance(40.104, 117.237, 40.004, 117.02)));
Console.WriteLine("---- ----- ---- ---- ----");
Console.WriteLine(Convert.ToString(GetSimilarDistance(40.104, 117.237, 40.004, 117.02)));
Console.ReadLine();
//21公里 距差3公里
对上面的公式解释如下:
1.Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;
2.a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差;
3.6378.137为地球半径,单位为千米;
计算出来的结果单位为千米。
========================================
mongo DB的坐标差别,假设空间索引是根据平面图来计算的,对于球体,甚至是椭球体,这个并不是精确的。
=====================如何投影到二位平面且计算勾股定律,两点直线距离。先进行模糊计算。
一、圆锥投影
(一)圆锥投影构成的一般公式
圆锥投影是假定以圆锥面作为投影面,使圆锥面与地球相切或相割,将球面上的经纬线投影到圆锥面上,然后把圆锥面沿一条母线剪开展为平面而成。当圆锥面与地球相切时,称为切圆锥投影;当圆锥面与地球相割时,称为割圆锥投影。
按圆锥与地球相对位置的不同,也有正轴、横轴和斜轴圆锥投影。但横轴和斜轴圆锥投影实际上很少应用,所以凡在地图上注明是圆锥投影的,一般都是正轴圆锥投影。
图2-39是正轴切圆锥投影示意图,视点在地球中心,纬线投影在圆锥面上仍为圆,不同的纬线投影为不同的圆,这些圆都互相平行,经线投影为相交于圆锥顶点的一束直线。如果将圆锥沿一条母线剪开展为平面,则成扇形,其顶角小于360°,在平面上纬线不再是圆,而是以圆锥顶点为圆心的同心圆弧,经线成为由圆锥顶点向外放射的直线束,经线间的夹角与相应的经度差成正比。
设球面上两条经线间的夹角为λ(图2-40),其投影在平面上为δ,δ与λ成正比,即δ=Cλ(C为常数)。纬线投影为同心圆弧,设其半径为ρ,它随纬度的变化而变化,即ρ是纬度j 的函数,ρ=f(j )。所以圆锥投影的平面极坐标一般公式为:
如以圆锥顶点S’为原点,中央经线为X轴,通过S’点垂直于X轴的直线为Y轴,则圆锥投影的直角坐标公式为:
x=-r cosd
y=r sind
通常在绘制圆锥投影时,以制图区域最南边的纬j S与中央经线的交点为坐标原点,则其直角坐标公式为:
x=r S-r cosd
y=r sind
式中r S为投影区域最南边纬线j S的投影半径。
根据(2-22)式可知,圆锥投影需要决定ρ的函数形式,由于P的函数形式不同,圆锥投影有很多种。c称为圆锥系数(圆锥常数),它与圆锥的切、割位置等条件有关,对于不同的圆锥投影,它是不同的。但对于某一个具体的圆锥投影,C值是固定的。总的来说,C值小于1,大于0,即0<c<1。当c=1时为方位投影,c=0时为圆柱投影,所以可以说方位投影和圆柱投影都是圆锥投影的特例。