经过大量阅读后,我编写了这3个sql语句,我想自动化并结合这3个sql语句。
select longitude,latitude from roadData;
SELECT geo_coordinates_latitude, geo_coordinates_longitude,
( 3959 * acos( cos( radians('-37.964637158') ) * cos( radians( geo_coordinates_latitude ) ) *
cos( radians( geo_coordinates_longitude ) - radians('144.408476215') ) + sin( radians('-37.964637158') ) *
sin( radians( geo_coordinates_latitude ) ) ) ) AS distance
FROM tweetmelbourne HAVING distance < .1 ORDER BY distance LIMIT 0 , 20;
Insert into roadTweets(longitude,latitude) values(144.408476215,-37.964637158);
**
我基本上想要做的是从roadData中选择所有坐标 一个接一个,然后在20岁以内的tweetMelbourne中找到所有要点 它的里程数并将这些点插入另一个表格。
**
描述tweetmelbourne;
描述roadData;
答案 0 :(得分:0)
我对此并不确定,所以请告诉我这是否有效:
Insert into roadTweets(longitude,latitude) values(SELECT geo_coordinates_latitude, geo_coordinates_longitude,
( 3959 * acos( cos( radians(SELECT latitude FROM roadData) ) * cos( radians( geo_coordinates_latitude ) ) *
cos( radians( geo_coordinates_longitude ) - radians(SELECT longitude FROM roadData) ) + sin( radians(latitude) ) *
sin( radians( geo_coordinates_latitude ) ) ) ) AS distance
FROM tweetmelbourne HAVING distance < .1 ORDER BY distance LIMIT 0 , 20);
答案 1 :(得分:0)
我想这应该是:
select * from tweetmelbourne t, roadData r
where distance(r.longitude,r.latitude,t.geo_coordinates_longitude,t.geo_coordinates_latitude) < 20;
用公式计算距离来实现距离函数或替换距离(r.longitude,r.latitude,t.geo_coordinates_longitude,t.geo_coordinates_latitude)。在oracle中,您可以使用包SDO_GEOMETRY。