Tôi cố gắng để tính toán khoảng cách giữa hai điểm trong Oracle DB,Làm thế nào để sử dụng sdo_distance Oracle
Point A is 40.716715, -74.033907
Point B is 40.716300, -74.033900
sử dụng câu lệnh SQL này:
SELECT sdo_geom.sdo_distance(sdo_geom.sdo_geometry(2001 ,8307 ,sdo_geom.sdo_point_type(40.716715, -74.033907 , NULL) ,NULL ,NULL)
,sdo_geom.sdo_geometry(2001 ,8307 ,sdo_point_type(40.716300,-74.033901, NULL) ,NULL ,NULL) ,0.0001 ,'unit=M') distance_in_m
from DUAL;
Kết quả là 12,7646185977151
Khi thực hiện việc sử dụng API CoreLocation của Apple:
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];
Kết quả là 46,0888946842423
thực hiện riêng
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.;
}
Kết quả là 46,120690774231
thực hiện của Oracle là rõ ràng ra, nhưng tôi không hiểu tại sao. Mọi sự trợ giúp sẽ rất được trân trọng.