mysql计算附近的地铁站
大家讲道理
大家讲道理 2017-04-17 15:47:24
0
2
565

如图有两张表,小区表(xiaoqu)和地铁表(metro),现在小区表里面小区附近的地铁站(图片中红色字段)是空的。想批量完善这个字段,求助
附近的定义是:离小区最近,并且在1000米以内的一个地铁站。
例如:北京的华腾园小区,附近1000米有双井和劲松两个站,但是劲松距离较近,所以华腾园那一行对应的就是劲松站。

目前已经自定义了两个经纬度之间距离的函数。getdistance(纬度1,经度1,纬度2,经度2),函数代码如下:

-- getdistance(Lat1 ,Lon1,Lat2 ,Lon2)
BEGIN 
    DECLARE
        dis DOUBLE ;
    SET dis = ACOS(
        SIN((Lat1 * 3.1415) / 180) * SIN((Lat2 * 3.1415) / 180) + COS((Lat1 * 3.1415) / 180) * COS((Lat2 * 3.1415) / 180) * COS(
            (Lon1 * 3.1415) / 180 - (Lon2 * 3.1415) / 180
        )
    ) * 6370996.81;
RETURN dis ;
END
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(2)
PHPzhong

私のアイデアは、ターゲットポイントの座標を取得する -> 特定の範囲rを使用して、地下鉄テーブル内のどの地下鉄がrにあるかを確認し、存在する場合は、rが増加するまで繰り返します。 r 距離が最大範囲を超えています。 -> 終了。

効率の鍵は距離の計算と比較にあると思います。

いいねを押す +0
大家讲道理

これは SQL を使用して達成すべきではないと思います。

私がそうするなら:

  1. 小区 情報を取得し、それがどの 城市 に属しているかを取得します。

  2. SQL を使用して 当前城市地铁数据 を検索します。

  3. その後、さまざまな 算法 (または上記の方法などのルール) を使用して最寄りの地下鉄を計算できます。

SQL はデータの保存と取得に使用する必要があり、あまり多くの論理関数を実行すべきではありません

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート