Featured image of post 【MySQL】geometry型ではなくdouble型の緯度経度から2点間距離を計算して算出する方法【GPS位置情報】

【MySQL】geometry型ではなくdouble型の緯度経度から2点間距離を計算して算出する方法【GPS位置情報】

4167文字

位置情報を使ったマーケティング強し

利用者からしたらとても便利な機能

スマホアプリやECサイトを使っていると、GPS情報を用いた現在地点を軸にした検索機能が搭載されるようになってきています。

近隣情報を簡単に検索する事が出来るので利用者側からしたらとても便利な機能ですよね♪

未経験開発者からしたら謎の技術

しかし、この機能を実現する上でGPSや緯度経度の位置情報を用いた機能を実装した事がない人からすると、
どうやって実現すればええんじゃ・・・。orz
と、不安になると思います。

なので、今回はMySQLに登録されている緯度経度情報と、利用者の緯度経度情報を用いた近隣検索時の方法をご紹介しようと思います。

手順

前提

今回はMySQL5.7を使用し、以下の県庁所在地テーブルを用意して、操作を行ってみようと思います。

create_table_prefectural_office.sql
CREATE TABLE `prefectural_office` (
    `id` BIGINT(20) NOT NULL COMMENT '県庁所在地ID',
    `prefectureName` VARCHAR(256) NOT NULL COMMENT '都道府県名',
    `latitude` DOUBLE(9 , 6 ) COMMENT '緯度',
    `longitude` DOUBLE(9 , 6 ) COMMENT '経度',
    `createdAt` DATETIME NOT NULL COMMENT '作成日',
    `updatedAt` DATETIME NOT NULL COMMENT '更新日',
    PRIMARY KEY (`id`)
)  ENGINE=INNODB DEFAULT CHARSET=UTF8MB4 COMMENT='県庁所在地テーブル';

MySQL5.7にはgeometry型なる緯度経度を取扱う際にとても便利な型があるとの事ですが、今回はdouble型でそれぞれを管理してみようと思います。

サンプルデータはこんな感じ。

insert_prefectural_office.sql
INSERT INTO `prefectural_office`
(`id`,`prefectureName`,`latitude`,`longitude`,`createdAt`,`updatedAt`)
VALUES
(	1	,"北海道",		43.06428056	,	141.3467972	,NOW(),NOW()),
(	2	,"青森県",		40.82435392	,	140.7399662	,NOW(),NOW()),
(	3	,"岩手県",		39.70358439	,	141.152709	,NOW(),NOW()),
(	4	,"宮城県",		38.26892558	,	140.8720061	,NOW(),NOW()),
(	5	,"秋田県",		39.71803056	,	140.1031778	,NOW(),NOW()),
(	6	,"山形県",		38.24048889	,	140.3634278	,NOW(),NOW()),
(	7	,"福島県",		37.74997969	,	140.4675816	,NOW(),NOW()),
(	8	,"茨城県",		36.34159972	,	140.4466188	,NOW(),NOW()),
(	9	,"栃木県",		36.56548547	,	139.8830857	,NOW(),NOW()),
(	10	,"群馬県",		36.39060111	,	139.0604359	,NOW(),NOW()),
(	11	,"埼玉県",		35.85692781	,	139.6487866	,NOW(),NOW()),
(	12	,"千葉県",		35.60458889	,	140.1231833	,NOW(),NOW()),
(	13	,"東京都",		35.68956667	,	139.6917222	,NOW(),NOW()),
(	14	,"神奈川県",		35.44771111	,	139.6425361	,NOW(),NOW()),
(	15	,"新潟県",		37.90243547	,	139.0238251	,NOW(),NOW()),
(	16	,"富山県",		36.69537383	,	137.2111942	,NOW(),NOW()),
(	17	,"石川県",		36.594283	,	136.6257139	,NOW(),NOW()),
(	18	,"福井県",		36.06542211	,	136.2218332	,NOW(),NOW()),
(	19	,"山梨県",		35.66394444	,	138.5683861	,NOW(),NOW()),
(	20	,"長野県",		36.65131389	,	138.1809972	,NOW(),NOW()),
(	21	,"岐阜県",		35.39119222	,	136.7221532	,NOW(),NOW()),
(	22	,"静岡県",		34.97691111	,	138.383025	,NOW(),NOW()),
(	23	,"愛知県",		35.18019722	,	136.9067417	,NOW(),NOW()),
(	24	,"三重県",		34.730275	,	136.5085972	,NOW(),NOW()),
(	25	,"滋賀県",		35.00439167	,	135.8683028	,NOW(),NOW()),
(	26	,"京都府",		35.02128056	,	135.7556361	,NOW(),NOW()),
(	27	,"大阪府",		34.68631997	,	135.5200224	,NOW(),NOW()),
(	28	,"兵庫県",		34.69110236	,	135.1828524	,NOW(),NOW()),
(	29	,"奈良県",		34.68471414	,	135.8327707	,NOW(),NOW()),
(	30	,"和歌山県",		34.22603522	,	135.1674939	,NOW(),NOW()),
(	31	,"鳥取県",		35.50363722	,	134.2381983	,NOW(),NOW()),
(	32	,"島根県",		35.47221683	,	133.0505309	,NOW(),NOW()),
(	33	,"岡山県",		34.66176389	,	133.9349	,NOW(),NOW()),
(	34	,"広島県",		34.396275	,	132.459375	,NOW(),NOW()),
(	35	,"山口県",		34.18580211	,	131.4715498	,NOW(),NOW()),
(	36	,"徳島県",		34.06573333	,	134.5594889	,NOW(),NOW()),
(	37	,"香川県",		34.34003492	,	134.0432789	,NOW(),NOW()),
(	38	,"愛媛県",		33.84164444	,	132.7661028	,NOW(),NOW()),
(	39	,"高知県",		33.55975556	,	133.5311167	,NOW(),NOW()),
(	40	,"福岡県",		33.60626111	,	130.4181167	,NOW(),NOW()),
(	41	,"佐賀県",		33.24932778	,	130.2988056	,NOW(),NOW()),
(	42	,"長崎県",		32.74508975	,	129.8736411	,NOW(),NOW()),
(	43	,"熊本県",		32.78976539	,	130.7416619	,NOW(),NOW()),
(	44	,"大分県",		33.23812308	,	131.6125898	,NOW(),NOW()),
(	45	,"宮崎県",		31.91100714	,	131.4238818	,NOW(),NOW()),
(	46	,"鹿児島県",		31.56022022	,	130.5582808	,NOW(),NOW()),
(	47	,"沖縄県",		26.212375	,	127.6809806	,NOW(),NOW()
);

SQL

SQLのテンプレートは以下の形になります。

[adsense-responsive]

2点間距離算出SQL
SELECT
  id, prefectureName, latitude, longitude,
  (
    6371 * acos( -- km単位
      cos(radians({緯度}))
      * cos(radians(latitude))
      * cos(radians(longitude) - radians({経度}))
      + sin(radians({緯度}))
      * sin(radians(latitude))
    )
  ) AS distance
FROM
  prefectural_office
;

この式を実行するとdistance項目に2点間距離km単位で取得出来るので、ORDER BYWHERE条件にも使えます。

確認

東京タワーから

sql
SELECT
       id, prefectureName, latitude, longitude,
       (
         6371 * acos(
           cos(radians(35.658581))
           * cos(radians(latitude))
           * cos(radians(longitude) - radians(139.745433))
           + sin(radians(35.658581))
           * sin(radians(latitude))
         )
       ) AS distance
     FROM
       prefectural_office
     ORDER BY
       distance
     ;

実行結果
+----+----------------+-----------+------------+--------------------+
| id | prefectureName | latitude  | longitude  | distance           |
+----+----------------+-----------+------------+--------------------+
| 13 | 東京都         | 35.689567 | 139.691722 |  5.950625481171745 |
| 11 | 埼玉県         | 35.856928 | 139.648787 |  23.71671427178685 |
| 14 | 神奈川県       | 35.447711 | 139.642536 |  25.22783961062546 |
| 12 | 千葉県         | 35.604589 | 140.123183 |   34.6637438158627 |
|  8 | 茨城県         | 36.341600 | 140.446619 |  98.72580516123963 |
|  9 | 栃木県         | 36.565485 | 139.883086 | 101.59838451303102 |
| 10 | 群馬県         | 36.390601 | 139.060436 | 102.07904543386358 |
| 19 | 山梨県         | 35.663944 | 138.568386 | 106.33948479828305 |
| 22 | 静岡県         | 34.976911 | 138.383025 | 144.99856059861196 |
| 20 | 長野県         | 36.651314 | 138.180997 | 178.63884533543978 |
|  7 | 福島県         | 37.749980 | 140.467582 |   241.296943791094 |
| 16 | 富山県         | 36.695374 | 137.211194 |  254.9981890193849 |
| 15 | 新潟県         | 37.902435 | 139.023825 |  257.6462044373321 |
| 23 | 愛知県         | 35.180197 | 136.906742 |   262.663603602861 |
| 21 | 岐阜県         | 35.391192 | 136.722153 |  275.1986596888009 |
|  6 | 山形県         | 38.240489 | 140.363428 | 292.29790529837885 |
| 17 | 石川県         | 36.594283 | 136.625714 |  298.8700798944938 |
|  4 | 宮城県         | 38.268926 | 140.872006 |  307.0225258167587 |
| 24 | 三重県         | 34.730275 | 136.508597 |  311.6940135546833 |
| 18 | 福井県         | 36.065422 | 136.221833 |  320.7195086989554 |
| 25 | 滋賀県         | 35.004392 | 135.868303 |  359.1309463878057 |
| 26 | 京都府         | 35.021281 | 135.755636 |  368.7410271001972 |
| 29 | 奈良県         | 34.684714 | 135.832771 | 371.72686754619974 |
| 27 | 大阪府         | 34.686320 | 135.520022 |  398.9483006847132 |
| 28 | 兵庫県         | 34.691102 | 135.182852 | 428.37485993933143 |
| 30 | 和歌山県       | 34.226035 | 135.167494 |  446.5892595756499 |
|  5 | 秋田県         | 39.718031 | 140.103178 |  452.4852998510215 |
|  3 | 岩手県         | 39.703584 | 141.152709 |   466.502623601523 |
| 31 | 鳥取県         | 35.503637 | 134.238198 |  498.2740045758765 |
| 36 | 徳島県         | 34.065733 | 134.559489 |  505.1378956725802 |
| 37 | 香川県         | 34.340035 | 134.043279 |  539.5901864769002 |
| 33 | 岡山県         | 34.661764 | 133.934900 |  539.6319451989946 |
|  2 | 青森県         | 40.824354 | 140.739966 |  580.9247160833129 |
| 32 | 島根県         | 35.472217 | 133.050531 |  605.8028384722828 |
| 39 | 高知県         | 33.559756 | 133.531117 |  614.5919508932951 |
| 38 | 愛媛県         | 33.841644 | 132.766103 |  668.7080193259349 |
| 34 | 広島県         | 34.396275 | 132.459375 |  677.9409956240623 |
| 35 | 山口県         | 34.185802 | 131.471550 |   771.658681940248 |
| 44 | 大分県         | 33.238123 | 131.612590 |  792.5108882098315 |
|  1 | 北海道         | 43.064281 | 141.346797 |  834.8571378337715 |
| 45 | 宮崎県         | 31.911007 | 131.423882 |  874.2327147262182 |
| 40 | 福岡県         | 33.606261 | 130.418117 |  882.9671997424465 |
| 43 | 熊本県         | 32.789765 | 130.741662 |  886.7054081831598 |
| 41 | 佐賀県         | 33.249328 | 130.298806 |  906.1897556389888 |
| 42 | 長崎県         | 32.745090 | 129.873641 |  963.3773037576652 |
| 46 | 鹿児島県       | 31.560220 | 130.558281 |  964.5350593543586 |
| 47 | 沖縄県         | 26.212375 | 127.680981 | 1555.5654256120438 |
+----+----------------+-----------+------------+--------------------+
47 rows in set (0.00 sec)

東京ディズニーランド」

[adsense-responsive]

SQL
SELECT
       id, prefectureName, latitude, longitude,
       (
         6371 * acos(
           cos(radians(35.632896))
           * cos(radians(latitude))
           * cos(radians(longitude) - radians(139.880394))
           + sin(radians(35.632896))
           * sin(radians(latitude))
         )
       ) AS distance
     FROM
       prefectural_office
     ORDER BY
       distance
     ;

実行結果
+----+----------------+-----------+------------+--------------------+
| id | prefectureName | latitude  | longitude  | distance           |
+----+----------------+-----------+------------+--------------------+
| 13 | 東京都         | 35.689567 | 139.691722 |  18.17280019714266 |
| 12 | 千葉県         | 35.604589 | 140.123183 |  22.17062746619568 |
| 14 | 神奈川県       | 35.447711 | 139.642536 | 29.785652991722298 |
| 11 | 埼玉県         | 35.856928 | 139.648787 |  32.51876968720438 |
|  8 | 茨城県         | 36.341600 | 140.446619 |  93.83719890141437 |
|  9 | 栃木県         | 36.565485 | 139.883086 | 103.69944748414214 |
| 10 | 群馬県         | 36.390601 | 139.060436 | 111.97130395204431 |
| 19 | 山梨県         | 35.663944 | 138.568386 | 118.59972289249698 |
| 22 | 静岡県         | 34.976911 | 138.383025 |  154.2163634010414 |
| 20 | 長野県         | 36.651314 | 138.180997 | 190.02196594148577 |
|  7 | 福島県         | 37.749980 | 140.467582 | 241.15901199823207 |
| 15 | 新潟県         | 37.902435 | 139.023825 |  263.6391672208879 |
| 16 | 富山県         | 36.695374 | 137.211194 |  267.1438549272756 |
| 23 | 愛知県         | 35.180197 | 136.906742 |  274.1532252820788 |
| 21 | 岐阜県         | 35.391192 | 136.722153 |  287.1064923662216 |
|  6 | 山形県         | 38.240489 | 140.363428 |  293.1106773787993 |
|  4 | 宮城県         | 38.268926 | 140.872006 |  306.0653796283301 |
| 17 | 石川県         | 36.594283 | 136.625714 |  311.2739615971568 |
| 24 | 三重県         | 34.730275 | 136.508597 |  322.4352233215935 |
| 18 | 福井県         | 36.065422 | 136.221833 |  333.2152705971605 |
| 25 | 滋賀県         | 35.004392 | 135.868303 |  370.6338570662051 |
| 26 | 京都府         | 35.021281 | 135.755636 |   380.296832785984 |
| 29 | 奈良県         | 34.684714 | 135.832771 |  382.7356249393663 |
| 27 | 大阪府         | 34.686320 | 135.520022 | 410.08535462108114 |
| 28 | 兵庫県         | 34.691102 | 135.182852 |   439.632617655556 |
|  5 | 秋田県         | 39.718031 | 140.103178 |  454.6687476761153 |
| 30 | 和歌山県       | 34.226035 | 135.167494 | 457.17781767896673 |
|  3 | 岩手県         | 39.703584 | 141.152709 |  466.2712271514309 |
| 31 | 鳥取県         | 35.503637 | 134.238198 | 510.46056137594127 |
| 36 | 徳島県         | 34.065733 | 134.559489 |   515.783440546053 |
| 37 | 香川県         | 34.340035 | 134.043279 |  550.7544795494472 |
| 33 | 岡山県         | 34.661764 | 133.934900 |    551.15715583364 |
|  2 | 青森県         | 40.824354 | 140.739966 |  582.1166669748246 |
| 32 | 島根県         | 35.472217 | 133.050531 |  618.0060937034976 |
| 39 | 高知県         | 33.559756 | 133.531117 |    625.05497118578 |
| 38 | 愛媛県         | 33.841644 | 132.766103 |  679.7199471549961 |
| 34 | 広島県         | 34.396275 | 132.459375 |  689.4895945575495 |
| 35 | 山口県         | 34.185802 | 131.471550 |  783.2035644592869 |
| 44 | 大分県         | 33.238123 | 131.612590 |  803.3114317853348 |
|  1 | 北海道         | 43.064281 | 141.346797 |  835.8568342321929 |
| 45 | 宮崎県         | 31.911007 | 131.423882 |  883.9704195918114 |
| 40 | 福岡県         | 33.606261 | 130.418117 |  894.2952839629211 |
| 43 | 熊本県         | 32.789765 | 130.741662 |   897.393020853011 |
| 41 | 佐賀県         | 33.249328 | 130.298806 |  917.3065174157102 |
| 42 | 長崎県         | 32.745090 | 129.873641 |  974.2494607741061 |
| 46 | 鹿児島県       | 31.560220 | 130.558281 |  974.3396415763573 |
| 47 | 沖縄県         | 26.212375 | 127.680981 |  1563.260125986337 |
+----+----------------+-----------+------------+--------------------+
47 rows in set (0.00 sec)

ユニバーサルスタジオジャパン

SQL
SELECT
       id, prefectureName, latitude, longitude,
       (
         6371 * acos(
           cos(radians(34.665442))
           * cos(radians(latitude))
           * cos(radians(longitude) - radians(135.432338))
           + sin(radians(34.665442))
           * sin(radians(latitude))
         )
       ) AS distance
     FROM
       prefectural_office
     ORDER BY
       distance
     ;

実行結果
+----+----------------+-----------+------------+--------------------+
| id | prefectureName | latitude  | longitude  | distance           |
+----+----------------+-----------+------------+--------------------+
| 27 | 大阪府         | 34.686320 | 135.520022 |     8.347566778513 |
| 28 | 兵庫県         | 34.691102 | 135.182852 |  22.99128820980341 |
| 29 | 奈良県         | 34.684714 | 135.832771 |  36.68053132565563 |
| 26 | 京都府         | 35.021281 | 135.755636 |  49.35652934358986 |
| 30 | 和歌山県       | 34.226035 | 135.167494 |  54.56255511489153 |
| 25 | 滋賀県         | 35.004392 | 135.868303 |  54.80634189341269 |
| 24 | 三重県         | 34.730275 | 136.508597 |  98.65552465883087 |
| 36 | 徳島県         | 34.065733 | 134.559489 | 104.23598440584891 |
| 37 | 香川県         | 34.340035 | 134.043279 | 132.32895828916233 |
| 33 | 岡山県         | 34.661764 | 133.934900 |  136.9526926807346 |
| 21 | 岐阜県         | 35.391192 | 136.722153 | 142.49426996787943 |
| 31 | 鳥取県         | 35.503637 | 134.238198 | 143.15151600464213 |
| 23 | 愛知県         | 35.180197 | 136.906742 | 146.10011358033697 |
| 18 | 福井県         | 36.065422 | 136.221833 | 171.34080802954392 |
| 39 | 高知県         | 33.559756 | 133.531117 | 213.88917489522728 |
| 32 | 島根県         | 35.472217 | 133.050531 | 234.58667000229642 |
| 17 | 石川県         | 36.594283 | 136.625714 | 240.06357228174784 |
| 38 | 愛媛県         | 33.841644 | 132.766103 |  261.6002041122604 |
| 22 | 静岡県         | 34.976911 | 138.383025 | 271.55808151699966 |
| 34 | 広島県         | 34.396275 | 132.459375 | 273.96679636138555 |
| 16 | 富山県         | 36.695374 | 137.211194 |  277.0482771922017 |
| 19 | 山梨県         | 35.663944 | 138.568386 | 305.91143906304444 |
| 20 | 長野県         | 36.651314 | 138.180997 |  332.2802193427927 |
| 35 | 山口県         | 34.185802 | 131.471550 |  367.1534391112997 |
| 10 | 群馬県         | 36.390601 | 139.060436 | 380.21064743798485 |
| 44 | 大分県         | 33.238123 | 131.612590 | 386.38142924304543 |
| 14 | 神奈川県       | 35.447711 | 139.642536 | 392.93585249737043 |
| 13 | 東京都         | 35.689567 | 139.691722 | 403.48593571831134 |
| 11 | 埼玉県         | 35.856928 | 139.648787 |  405.0613079334491 |
| 12 | 千葉県         | 35.604589 | 140.123183 | 439.10891768057496 |
|  9 | 栃木県         | 36.565485 | 139.883086 |  454.3548599849104 |
| 40 | 福岡県         | 33.606261 | 130.418117 | 476.22556598796143 |
| 43 | 熊本県         | 32.789765 | 130.741662 | 481.25076502077144 |
| 45 | 宮崎県         | 31.911007 | 131.423882 | 482.23347578635526 |
| 15 | 新潟県         | 37.902435 | 139.023825 | 482.80623579842376 |
|  8 | 茨城県         | 36.341600 | 140.446619 |  490.5932563469201 |
| 41 | 佐賀県         | 33.249328 | 130.298806 |  498.8947131076346 |
| 42 | 長崎県         | 32.745090 | 129.873641 |  556.6640089687979 |
|  7 | 福島県         | 37.749980 | 140.467582 |  567.0608788621107 |
| 46 | 鹿児島県       | 31.560220 | 130.558281 |  570.2127524749369 |
|  6 | 山形県         | 38.240489 | 140.363428 |  593.5724408674877 |
|  4 | 宮城県         | 38.268926 | 140.872006 |  629.9975475284301 |
|  5 | 秋田県         | 39.718031 | 140.103178 |  697.4878644657354 |
|  3 | 岩手県         | 39.703584 | 141.152709 |   755.060116327493 |
|  2 | 青森県         | 40.824354 | 140.739966 |  828.3431528753739 |
|  1 | 北海道         | 43.064281 | 141.346797 | 1064.3887047685812 |
| 47 | 沖縄県         | 26.212375 | 127.680981 | 1197.2651815201575 |
+----+----------------+-----------+------------+--------------------+

ハウステンボス

SQL
SELECT
       id, prefectureName, latitude, longitude,
       (
         6371 * acos(
           cos(radians(33.089428))
           * cos(radians(latitude))
           * cos(radians(longitude) - radians(129.793823))
           + sin(radians(33.089428))
           * sin(radians(latitude))
         )
       ) AS distance
     FROM
       prefectural_office
     ORDER BY
       distance
     ;

実行結果
+----+----------------+-----------+------------+--------------------+
| id | prefectureName | latitude  | longitude  | distance           |
+----+----------------+-----------+------------+--------------------+
| 42 | 長崎県         | 32.745090 | 129.873641 | 39.006781737299406 |
| 41 | 佐賀県         | 33.249328 | 130.298806 |  50.25251025637944 |
| 40 | 福岡県         | 33.606261 | 130.418117 |  81.64137237972476 |
| 43 | 熊本県         | 32.789765 | 130.741662 |  94.51964220169204 |
| 44 | 大分県         | 33.238123 | 131.612590 | 170.09849547640988 |
| 46 | 鹿児島県       | 31.560220 | 130.558281 |  184.5877329538185 |
| 35 | 山口県         | 34.185802 | 131.471550 |  197.4427959258778 |
| 45 | 宮崎県         | 31.911007 | 131.423882 | 201.33641358776467 |
| 34 | 広島県         | 34.396275 | 132.459375 |  286.0973317466086 |
| 38 | 愛媛県         | 33.841644 | 132.766103 |  288.1057552058132 |
| 39 | 高知県         | 33.559756 | 133.531117 | 351.13263065584806 |
| 32 | 島根県         | 35.472217 | 133.050531 | 399.62028179620415 |
| 37 | 香川県         | 34.340035 | 134.043279 |  416.8775350373696 |
| 33 | 岡山県         | 34.661764 | 133.934900 |  420.3347949356522 |
| 36 | 徳島県         | 34.065733 | 134.559489 |  454.5958942707968 |
| 31 | 鳥取県         | 35.503637 | 134.238198 | 488.52976177734905 |
| 30 | 和歌山県       | 34.226035 | 135.167494 |  513.0918965144793 |
| 28 | 兵庫県         | 34.691102 | 135.182852 |  528.2595175551966 |
| 27 | 大阪府         | 34.686320 | 135.520022 |  557.4898311292636 |
| 29 | 奈良県         | 34.684714 | 135.832771 |  584.8648213347923 |
| 26 | 京都府         | 35.021281 | 135.755636 |   589.614030615892 |
| 25 | 滋賀県         | 35.004392 | 135.868303 |  598.6692957893513 |
| 24 | 三重県         | 34.730275 | 136.508597 |  645.8051777989417 |
| 18 | 福井県         | 36.065422 | 136.221833 |   674.936294482572 |
| 21 | 岐阜県         | 35.391192 | 136.722153 |  686.1698985892883 |
| 23 | 愛知県         | 35.180197 | 136.906742 |   694.508354750148 |
| 17 | 石川県         | 36.594283 | 136.625714 |  734.9633916802294 |
| 16 | 富山県         | 36.695374 | 137.211194 |  786.0317808537424 |
| 47 | 沖縄県         | 26.212375 | 127.680981 |  791.4183104194316 |
| 22 | 静岡県         | 34.976911 | 138.383025 |  818.5317594981125 |
| 19 | 山梨県         | 35.663944 | 138.568386 |   854.257447240117 |
| 20 | 長野県         | 36.651314 | 138.180997 |  861.1205510125395 |
| 10 | 群馬県         | 36.390601 | 139.060436 |  922.3328307429138 |
| 14 | 神奈川県       | 35.447711 | 139.642536 |  941.7587818306522 |
| 13 | 東京都         | 35.689567 | 139.691722 |  952.6166412260941 |
| 11 | 埼玉県         | 35.856928 | 139.648787 |  953.8219996389495 |
| 12 | 千葉県         | 35.604589 | 140.123183 |  988.1147598054422 |
| 15 | 新潟県         | 37.902435 | 139.023825 |   991.507859962948 |
|  9 | 栃木県         | 36.565485 | 139.883086 |  998.0663983359384 |
|  8 | 茨城県         | 36.341600 | 140.446619 | 1037.9360355789986 |
|  7 | 福島県         | 37.749980 | 140.467582 | 1096.2901656515048 |
|  6 | 山形県         | 38.240489 | 140.363428 | 1112.3675058713052 |
|  4 | 宮城県         | 38.268926 | 140.872006 |  1153.313393046397 |
|  5 | 秋田県         | 39.718031 | 140.103178 | 1179.5036322380151 |
|  3 | 岩手県         | 39.703584 | 141.152709 | 1253.1151896285637 |
|  2 | 青森県         | 40.824354 | 140.739966 |  1296.456991543648 |
|  1 | 北海道         | 43.064281 | 141.346797 | 1498.0510581340395 |
+----+----------------+-----------+------------+--------------------+
47 rows in set (0.00 sec)

終わりに

以上のように、緯度経度さえDBに登録しておけば2点間距離を簡単に算出する事が出来ました。

近隣検索方法について悩んでいる方はぜひ参考にしてみてください♪