计算地理位置之间的距离

.net 根据坐标,计算指定范围内的最大最小经纬度、根据两点间经纬度坐标(double值),计算两点间距离(注意:这里的单位是米)

 #region 根据坐标,计算指定范围内的最大最小经纬度、根据两点间经纬度坐标(double值),计算两点间距离,单位为米

        private static double PI = Math.PI; //3.14159265;  //π
        private static double EARTH_RADIUS = 6378137;    //地球半径
        private static double RAD = Math.PI / 180.0;   //   π/180

        #region 根据坐标,计算指定范围内的最大最小经纬度
        /// <summary>
        /// 根据坐标,计算指定范围内的最大最小经纬度
        /// </summary>
        /// <param name="lng">经度</param>
        /// <param name="lat">纬度</param>
        /// <param name="raidus">范围(米)</param>
        /// <returns>返回最大、最小经纬度minLng, minLat, maxLng, maxLat</returns>
        public double[] getAround(double lng, double lat, int raidus)
        {
            //The circumference of the earth is 24,901 miles.
            //24,901/360 = 69.17 miles / degree  

            Double latitude = lat;
            Double longitude = lng;

            Double degree = (24901 * 1609) / 360.0;   //地球的周长是24901英里
            double raidusMile = raidus;

            //先计算纬度
            Double dpmLat = 1 / degree;
            Double radiusLat = dpmLat * raidusMile;
            Double minLat = latitude - radiusLat;
            Double maxLat = latitude + radiusLat;

            //计算经度
            Double mpdLng = degree * Math.Cos(latitude * (PI / 180));  //纬度的余弦
            Double dpmLng = 1 / mpdLng;
            Double radiusLng = dpmLng * raidusMile;
            Double minLng = longitude - radiusLng;
            Double maxLng = longitude + radiusLng;
            //System.out.println("["+minLat+","+minLng+","+maxLat+","+maxLng+"]");
                               //最小经度,最小纬度,最大经度,最大纬度
            return new double[] { minLng, minLat, maxLng, maxLat };
        }
        #endregion

        #region 根据两点间经纬度坐标(double值),计算两点间距离,单位为米
        /// <summary>
        /// 根据两点间经纬度坐标(double值),计算两点间距离,单位为米
        /// </summary>
        /// <param name="lng1">经度1</param>
        /// <param name="lat1">纬度1</param>
        /// <param name="lng2">经度2</param>
        /// <param name="lat2">纬度2</param>
        /// <returns>返回距离(米)</returns>
        public double getDistance(double lng1, double lat1, double lng2, double lat2)
        {
            double radLat1 = lat1 * RAD;  // // RAD=π/180
            double radLat2 = lat2 * RAD;
            double a = radLat1 - radLat2;
            double b = (lng1 - lng2) * RAD;
            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;
        }

        #endregion

        #endregion

sql:计算地球上两个坐标点(经度,纬度)之间距离sql函数(注意:这里的单位是千米)

go   

--计算地球上两个坐标点(经度,纬度)之间距离sql函数
 CREATE FUNCTION [dbo].[fnGetDistance](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT 

   AS
 BEGIN
   --距离(千米)
  DECLARE @Distance REAL
  DECLARE @EARTH_RADIUS REAL
  SET @EARTH_RADIUS = 6378.137
  DECLARE @RadLatBegin REAL,@RadLatEnd REAL,@RadLatDiff REAL,@RadLngDiff REAL
   SET @RadLatBegin = @LatBegin *PI()/180.0
  SET @RadLatEnd = @LatEnd *PI()/180.0
  SET @RadLatDiff = @RadLatBegin - @RadLatEnd
  SET @RadLngDiff = @LngBegin *PI()/180.0 - @LngEnd *PI()/180.0
  SET @Distance = 2 *ASIN(SQRT(POWER(SIN(@RadLatDiff/2), 2)+COS(@RadLatBegin)*COS(@RadLatEnd)*POWER(SIN(@RadLngDiff/2), 2)))
  SET @Distance = @Distance * @EARTH_RADIUS
  SET @Distance = Round(@Distance * 10000) / 10000
  RETURN @Distance
 END 

sql转自:http://www.aspbc.com/tech/showtech.asp?id=1136
百度地图获取两点间的距离在线测试:http://developer.baidu.com/map/jsdemo.htm#a6_1

时间: 2024-08-11 01:34:56

计算地理位置之间的距离的相关文章

利用结构类型的相关知识计算两点之间的距离

#include<stdio.h>#include<stdlib.h>#include<math.h> struct point{ /*点的结构类型名*/ float x; /*横坐标*/ float y; /*纵坐标*/ }; struct point readPoint(); /*函数原型声明*/float distance(struct point p1,struct point p2);/*主函数*/ int main(void){ struct point a

2D和3D空间中计算两点之间的距离

自己在做游戏的忘记了Unity帮我们提供计算两点之间的距离,在百度搜索了下. 原来有一个公式自己就写了一个方法O(∩_∩)O~,到僵尸到达某一个点之后就向另一个奔跑过去 /// <summary> /// 3维中如何计算两点之间的距离 /// </summary> /// <param name="p1"></param> /// <param name="p2"></param> /// &l

openlayer3计算两点之间的距离

openlayer3计算两点之间的距离 对应的openlayers的版本为3.7. 主要用的接口是ol.Sphere.haversineDistance([x1,y1],[x2,y2]): 4326坐标系中计算两点距离的方式为: var wgs84Sphere = new ol.Sphere(6378137); wgs84Sphere.haversineDistance(C1,C2); 示例为: var wgs84Sphere = new ol.Sphere(6378137); wgs84Sph

使用友元函数计算两点之间的距离

#include <iostream> #include <cmath> using namespace std; class CPoint//点类 { private: double x;//横坐标 double y;//纵坐标 public: //使用初始化表初始化数据成员 CPoint(double xx=0,double yy=0):x(xx),y(yy){} //定义友元函数用于计算两点之间的距离 friend double Distance(CPoint &p1

给你两个经纬度,计算他们之间的距离

原文:给你两个经纬度,计算他们之间的距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬.北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地

sql server2008根据经纬度计算两点之间的距离

--通过经纬度计算两点之间的距离 create FUNCTION [dbo].[fnGetDistanceNew] --LatBegin 开始经度 --LngBegin 开始维度 --29.490295,106.486654,29.615467, 106.581515 (@LatBegin1 varchar(128), @LngBegin1 varchar(128),@location varchar(128)) Returns real AS BEGIN --转换location字段,防止字段

JAVA实现求一点到另两点连线的距离,计算两点之间的距离

直接上代码 /** *计算两点之间距离 */ public static double getDistance(Point start,Point end){ double lat1=start.getX().doubleValue(); double lat2=end.getX().doubleValue(); double lon1=start.getY().doubleValue(); double lon2=end.getY().doubleValue(); return Math.sq

计算两点之间的距离,两点之间的斜率(角度)--秀清

// // ViewController.m // 勾股定理 // // Created by 张秀清 on 15/6/8. // Copyright (c) 2015年 张秀清. All rights reserved. // #import "ViewController.h" //角度转弧度 #define degreesToradian(x) (M_PI*x/180.0) //弧度转角度 #define radiansToDegrees(x) (180.0*x/M_PI) @i

杭电2001 计算两点之间的距离

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2001 注意输入时候的空格就可以了 #include<stdio.h> #include<math.h> int main() { double x1,x2,y1,y2; while(scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)!=EOF) { getchar(); printf("%.2f