平成30/ 2018-12-14 11:06
緯度経度から距離(km)を求める

|
| PHP
|----------
$earth_r = 6378.137;                       // 地球の半径
$idosa   = M_PI / 180 * ($lat_b - $lat_a); // 緯度差をラジアンに
$keidosa = M_PI / 180 * ($lng_b - $lng_a); // 経度差をラジアンに
$nanboku_kyori = $earth_r * $idosa;        // 南北の距離
$touzai_kyori = cos(M_PI / 180 * $lat_a) * $earth_r*$keidosa; // 東西の距離
$distance = sqrt(pow($touzai_kyori,2)+pow($nanboku_kyori,2)); // 三平方の定理で距離を求める
-
distance is km
M_PI はPHPの固定値。3.1415926535898 の値が入っている。


|
| MYSQL
|----------
select
    station_cd, shop_id
from
    station inner join
    pharmacy_shop on
        station.pref_cd=13 and
        sqrt
        (
            power
            (
                cos((pi()/180)*station.lat)*6378.137*((pi()/180)*(pharmacy_shop.lon - station.lon))
                , 2
            )
            + power
            (
                6378.137 * ((pi()/180)*(pharmacy_shop.lat - station.lat))
                , 2
            )
        ) < 2
limit 0, 10
;
-
上記は、2km圏内の情報を取得する場合。
-
上記のほうが精度高いが
以下のSQL用でもなんとなく求められる。
// 5km以下の距離を求める式。
select name, SQRT(POWER((35.929023 - lat) / 0.0111, 2) + power((139.65065 - lon) / 0.0091, 2)) as distance
from sta where SQRT(POWER((35.929023 - lat) / 0.0111, 2) + power((139.65065 - lon) / 0.0091, 2)) <=5
;
// distance is km

PHPならば
if(
sqrt(pow(($row["lat"]-$rr["lat"])/0.0111, 2) + pow(($row["lng"]-$rr["lng"])/0.0091, 2)) <= 10
){
}



____ Thanks.
緯度経度より距離を求める方法・備忘録 | 地球は丸い!
http://www.kiteretsu-so.com/archives/1183

「円周率を得る」サンプルコード
http://javascriptist.net/ref/Math.PI.html

pi - 円周率の値を得る
http://php.net/manual/ja/function.pi.php

円周率を求める
http://www.sql-reference.com/math/pi.html