如何使用Oracle的sdo_distance

如何使用Oracle的sdo_distance,第1张

概述我试图计算Oracle DB中两点之间的距离, Point A is 40.716715, -74.033907Point B is 40.716300, -74.033900 使用这个sql语句: SELECT sdo_geom.sdo_distance( sdo_geom.sdo_geometry(2001 ,8307 ,sdo_geom.sdo_point_type(40.716715 我试图计算Oracle DB中两点之间的距离,

Point A is 40.716715,-74.033907Point B is 40.716300,-74.033900

使用这个SQL语句:

SELECT   sdo_geom.sdo_distance( sdo_geom.sdo_geometry(2001,8307,sdo_geom.sdo_point_type(40.716715,-74.033907,NulL),NulL,sdo_geom.sdo_geometry(2001,sdo_point_type(40.716300,-74.033901,0.0001,'unit=M') distance_in_m                           from DUAL;

结果是12.7646185977151

使用Apple的CoreLocation API进行此 *** 作时:

CLLocation* pa = [[CLLocation alloc] initWithLatitude:40.716715 longitude:-74.033907];CLLocation* pa2 = [[CLLocation alloc] initWithLatitude:40.716300 longitude:-74.033900];CLLocationdistance dist = [pa distanceFromLocation:pa2];

结果是46.0888946842423

自己实施

double dinstance_m(double lat1,double long1,double lat2,double long2){ double dlong = (long2 - long1) * d2r; double dlat = (lat2 - lat1) * d2r; double a = pow(sin(dlat/2.0),2) + cos(lat1*d2r) * cos(lat2*d2r) * pow(sin(dlong/2.0),2); double c = 2 * atan2(sqrt(a),sqrt(1-a)); double d = 6367 * c;return d * 1000.;}

结果是46.120690774231

Oracle的实现显然是关闭的,但我不明白为什么.任何帮助将不胜感激.

解决方法 尝试颠倒纵坐标的顺序,如:

SELECT sdo_geom.sdo_distance(sdo_geom.sdo_geometry(2001,sdo_geom.sdo_point_type(-74.033907,40.716715,sdo_point_type(-74.033901,40.716300,'unit=M') distance_in_m                           from DUAL;

我得到46.087817955912.

使用SDO_GEOMETRY时,纵坐标以X,Y(经度,纬度)顺序列出.

总结

以上是内存溢出为你收集整理的如何使用Oracle的sdo_distance全部内容,希望文章能够帮你解决如何使用Oracle的sdo_distance所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1165854.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存