【首先說明,編程與資料庫小白,正在慢慢摸索,望高手不吝賜教】
在用oracle處理軌跡資料時,想通過select陳述句將坐標范圍在某一點周圍的記錄找出來,總顯示 引數超出范圍,具體使用的方法如下:select * from 表1
where 2 * 6371 * ASIN(SQRT(round(SIN((34.223445-LATITUDE)*acos(-1)/360),4)+COS(34.223445*acos(-1)/180)*COS(LATITUDE*acos(-1)/180)*round(SIN((113.011235-LONGITUDE)*acos(-1)/360),4))) <0.5
說明:其中 表1 為要查找的資料記錄表;34.223445,113.011235是我選定的固定點,LATITUDE和LONGITUDE分別為表中的緯度和經度值,求助大神,為什么運行不了,這樣做有什么問題,應該怎么做?非常感謝
【另外說明一下,在我的表中LATITUDE和LONGITUDE欄位均為VARCHAR2()格式,我試圖使用to_number修改資料型別未成功,也試過通過函式來查詢記錄同樣失敗,新手小白求大神指教,程式如下:
insert into 表1(編號,X,Y) select 編號,to_number(X),to_number(Y) from user.表2;
【說明:這一句試圖將表2中的X和Y轉換為number型插入到新表1中,結果運行完沒有任何資料;】
CREATE OR REPLACE FUNCTION GetDistance(lat1 varchar2(9),
lng1 number,
lat2 number,
lng2 number) RETURN number is
earth_padius number := 6378.137;
radLat1 number := rad(lat1);
radLat2 number := rad(lat2);
a number := radLat1 - radLat2;
b number := rad(lng1) - rad(lng2);
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;
update GPSA set DISTANCE=distance(Y,X,34.223445,108.948301);
【說明:這一段創建函式是找的別人的代碼,想通過呼叫函式來求出每一軌跡點與固定點的距離更新到新建的一列distance中,但運行顯示呼叫函式時引數或型別不符】
uj5u.com熱心網友回復:
測驗沒啥問題,可能由于部分的LATITUDE和LONGITUDE的值有問題導致,目前沒資料分析不出原因轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/69669.html
標籤:基礎和管理
上一篇:select j.user_id,s.username from AR_JPUSH_USER j join sysuser s on s.userid = j.
