oracle函数,可以很快捷查出经纬度之间距离
oracle函数代码:
CREATE OR REPLACE FUNCTION GetDistance(LngBegin number,
LatBegin number,
LngEnd number,
LatEnd number) RETURN NUMBER is
earth_padius number := 6378.137;
radLat1 number := rad(LngBegin);
radLat2 number := rad(LngEnd);
a number := radLat1 - radLat2;
b number := rad(LatBegin) - rad(LatEnd);
s number := 0;
begin
s := 2 *
Asin(Sqrt(power(sin(a / 2), 2) +
cos(radLat1) * cos(radLat2) * power(sin(b / 2), 2)));
s := s * earth_padius;
s := Round(s * 10000)/10;
return s;
end;
图片:
代码中使用:
<select id="selectNearCameras" parameterType="TrGlCameraPlace" resultMap="PointInfo">
SELECT r.id, r.name,r.lat, r.lon from
(SELECT id, camera_name name,lat, lon, GetDistance(#{lon},#{lat},LON,LAT) AS distance
FROM TR_GL_CAMERA) r where r.distance <![CDATA[ <= ]]> #{distance}*1000
</select>
图片:
GetDistance(“前一个经度”,“前一个纬度”,“后一个经度”,“后一个纬度”)
计算两个经度纬度间的距离,如上图所示。