用经纬度大致计算距离

用经纬度大致计算距离

地球赤道上环绕地球一周走一圈共 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公里

 

 关于经纬度求距离 - cza55007 - NO.1.LY

对上面的公式解释如下:

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时为圆柱投影,所以可以说方位投影和圆柱投影都是圆锥投影的特例。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值