1.使用Java进行计算
/** * 类功能说明:地图坐标距离计算工具类 * Title: DistanceUtil.java * @author liuxing * @date 2013-9-8 下午10:36:03 * @version V1.0 */ public class DistanceUtil { private static double DEF_PI = Math.PI; // PI private static double DEF_2PI = Math.PI * 2; // 2*PI private static double DEF_PI180 = Math.PI / 180; // PI/180.0 private static double DEF_R = 6370693.5; // 地球半径 /** * * 功能说明:计算两个地图坐标点之间的距离(近距离计算) * liuxing 2013-9-8 下午10:42:17 * @param lng1 起点经度 * @param lat1 起点纬度 * @param lng2 终点经度 * @param lat2 终点纬度 * @return */ public static double getShortDistance(double lng1, double lat1, double lng2, double lat2) { double ew1, ns1, ew2, ns2; double dx, dy, dew; double distance; // 角度转换为弧度 ew1 = Math.toRadians(lng1); ns1 = Math.toRadians(lat1); ew2 = Math.toRadians(lng2); ns2 = Math.toRadians(lat2); // 经度差 dew = ew1 - ew2; // 若跨东经和西经180 度,进行调整 if (dew > DEF_PI){ dew = DEF_2PI - dew; } else if (dew < -DEF_PI){ dew = DEF_2PI + dew; } dx = DEF_R * Math.cos(ns1) * dew; // 东西方向长度(在纬度圈上的投影长度) dy = DEF_R * (ns1 - ns2); // 南北方向长度(在经度圈上的投影长度) // 勾股定理求斜边长 distance = Math.sqrt(dx * dx + dy * dy); return distance; } /** * * 功能说明:计算两个地图坐标点之间的距离(远距离计算) * liuxing 2013-9-8 下午10:43:21 * @param lng1 起点经度 * @param lat1 起点纬度 * @param lng2 终点经度 * @param lat2 终点纬度 * @return */ public static double getLongDistance(double lng1, double lat1, double lng2, double lat2) { double ew1, ns1, ew2, ns2; double distance; // 角度转换为弧度 ew1 = lng1 * DEF_PI180; ns1 = lat1 * DEF_PI180; ew2 = lng2 * DEF_PI180; ns2 = lat2 * DEF_PI180; // 求大圆劣弧与球心所夹的角(弧度) distance = Math.sin(ns1) * Math.sin(ns2) + Math.cos(ns1) * Math.cos(ns2) * Math.cos(ew1 - ew2); // 调整到[-1..1]范围内,避免溢出 if (distance > 1.0){ distance = 1.0; } else if (distance < -1.0){ distance = -1.0; } // 求大圆劣弧长度 distance = DEF_R * Math.acos(distance); return distance; } public static void main(String[] args) { double mLat1 = 31.24081800000000; // point1纬度 double mLng1 = 121.46541700000000; // point1经度 double mLat2 = 31.239946; // point2纬度 double mLng2 = 121.466417; // point2经度 double distanceByShort = getShortDistance(mLng1, mLat1, mLng2, mLat2); System.out.println(distanceByShort); double distanceByLong = getLongDistance(mLng1, mLat1, mLng2, mLat2); System.out.println(distanceByLong); } }
2.使用SqlServer函数计算
其他数据库版本请找到相应的函数替换后移植
-- ============================================= -- Author: liuxing -- Create date: 2013-09-10 -- Description: 计算2个坐标点的距离(短距离计算) -- ============================================= CREATE function dbo.fn_getShortDistance( @lng1 decimal(19,11) ,@lat1 decimal(19,11) ,@lng2 decimal(19,11) ,@lat2 decimal(19,11) ) returns decimal(19,11) AS BEGIN --declare @lng1 decimal(19,11) --declare @lat1 decimal(19,11) --declare @lng2 decimal(19,11) --declare @lat2 decimal(19,11) --set @lat1 = 31.238662--; // point1纬度 --set @lng1 = 121.466633--; // point1经度 --set @lat2 = 31.239727--; // point2纬度 --set @lng2 = 121.462745--; // point2经度 declare @ew1 decimal(19,11) , @ns1 decimal(19,11) , @ew2 decimal(19,11) , @ns2 decimal(19,11) , @dx decimal(19,11) , @dy decimal(19,11) , @dew decimal(19,11) , @distance decimal(19,11) -- 角度转换为弧度 set @ew1 = Radians(@lng1)-- * 0.01745329252; set @ns1 = Radians(@lat1)-- * 0.01745329252; set @ew2 = Radians(@lng2)-- * 0.01745329252; set @ns2 = Radians(@lat2)-- * 0.01745329252; -- 经度差 set @dew = @ew1 - @ew2; -- 若跨东经和西经180 度,进行调整 if (@dew > Pi()) begin set @dew = 2 * Pi() - @dew; end else if (@dew < -Pi()) begin set @dew = 2 * Pi() + @dew; end set @dx = 6370693.5 * Cos(@ns1) * @dew -- 东西方向长度(在纬度圈上的投影长度) set @dy = 6370693.5 * (@ns1 - @ns2) -- 南北方向长度(在经度圈上的投影长度) -- 勾股定理求斜边长,开平方根 set @distance = sqrt(@dx * @dx + @dy * @dy); return @distance; --print @distance END
相关推荐
在本文中,我们将探讨如何利用Java、JavaScript(JS)以及MySQL来计算高德地图中两个坐标点之间的距离。首先,我们需要了解的是,高德地图使用的是WGS84坐标系,这是一种全球通用的地理坐标系统,它以经纬度来表示...
本文主要介绍了Java通过经纬度坐标获取两个点之间的直线距离的示例,通过示例代码详细介绍了计算两个点之间的直线距离的方法,对大家的学习或者工作具有一定的参考学习价值。 一、经纬度坐标获取两个点之间的直线...
在MySQL数据库中,计算两个地理位置之间的距离通常涉及到地理坐标系统,即经纬度。经纬度坐标是地球表面位置的标准表示方式,其中经度表示东西方向,纬度表示南北方向。本篇文章将详细介绍如何利用MySQL的内置函数和...
根据已知点坐标计算附近位置,代码详细解释了三种计算策略。主要涉及日常需要解决问题,例如类似于滴滴打车实现查找附近车辆业务逻辑和贝壳找房根据指定位置筛选出附近房源,上述两场场景应用可借鉴代码中两种方法...
下面我们将深入探讨这两个版本的实现原理以及它们在实际应用中的价值。 首先,让我们来看Java版本的日出日落时间计算。Java提供了丰富的库来处理日期和时间,如Java 8引入的`java.time`包。通常,计算日出日落会...
经纬度坐标系统使用两个角度来定义地球表面上任意一点的位置:经度(Longitude)和纬度(Latitude)。 - **纬度**:范围从 -90° 到 +90°,其中0°代表赤道,+90°代表北极点,-90°代表南极点。 - **经度**:范围...
两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...
标题 "数据库中的二维数据在坐标系中描绘其关系曲线Jsp网页版" 涉及的是如何使用JSP(JavaServer Pages)技术在网页上展示从数据库中获取的二维数据的关系曲线。在这个场景中,数据库存储了两列数值,它们可能是成对...
描述中提到的“SQL Server 的版本和 MySQL的版本”表明该数据集可能提供了两种数据库系统的版本,这可能是因为开发人员或研究人员在不同的环境下使用了这两种数据库系统来存储和管理这些坐标数据。SQL Server是微软...
本篇文章将详细讲解如何使用`meteoInfo`和`geotools`这两个Java库来解析`shp`文件,提取其中的数据,并获取边界线数据、中心点坐标以及最大和最小经纬度值。 `meteoInfo`是一个专门处理气象数据的Java库,虽然它的...
两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...
在讨论具体的转换方法之前,我们首先需要了解两个基本概念:大地坐标系和投影坐标系。 - **大地坐标系**(Geographic Coordinate System):这是一种使用经度和纬度来定义地球上任意一点位置的坐标系统。在Oracle中...
1. **合并步骤**:如果两个类别的距离小于某个阈值,那么这两个类别将被合并为一个新的类别。 2. **分裂步骤**:如果一个类别的标准偏差(或其它聚类度量)超过某个阈值,那么这个类别会被分裂为两个新的类别。 在...
两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...
接着,我们需要一个方法来计算两个地点之间的距离。这里可以使用Haversine公式,它基于地球的半径来计算地球上两点之间的大圆距离。在Java中实现如下: ```java public static double distanceInKm(Location loc1, ...
2. **距离量算**:这项功能允许用户计算两个地理对象之间的直线距离、最短路径距离或其他类型的网络距离。在GIS中,这通常涉及到几何对象的坐标计算,以及考虑到地形和障碍的网络分析。 3. **数据库连接**:此程序...
在JAVA中实现这个算法,首先需要定义一个`Coordinate`类来表示二维坐标,通常包含`x`和`y`两个属性,以及相关的操作方法,如计算两点间距离、拷贝坐标等。例如: ```java public class Coordinate { private ...
2. **Swing或JavaFX**:这两个是Java用于构建GUI的库。开发者可能使用其中之一来创建俄罗斯方块的游戏界面,包括游戏区、控制面板、得分显示等元素。 3. **游戏算法**:项目中的核心算法包括方块生成、旋转、下落、...
实现这个功能的两个关键步骤是: 1. **坐标点表导出成矢量Shape**: 这一步涉及从数据库中读取包含点坐标的数据表,通常是通过SQL查询获取。每条记录可能代表一个点的坐标(经度和纬度)。然后,使用GIS库(如GDAL...