トップ  > web開発  > 位置情報  > 記事

No.2310 PHPとMySQLで携帯サイトを開発しているのですが、iエリアやGPS機能を用いて経度緯...

PHPとMySQLで携帯サイトを開発しているのですが、iエリアやGPS機能を用いて経度緯...

search_question_xさん

PHPとMySQLで携帯サイトを開発しているのですが、iエリアやGPS機能を用いて経度緯度を取得して現在地から近い順にデータを並べ替えるにはどのようにしたらよいのでしょうか?(DBに10進数の経度緯度を保持)

iエリアやGPSからの経度緯度の取得はできる状態です。あとは近い順にデータの一覧を表示したいのです。その際に、距離も表示しようと考えています。どうかみなさんのお知恵を貸してください

補足
実際に検索は行い、一通りのサイトは拝見しました。できれば、実際のソース等で教えていただければうれしく思います。要は近い順に並べるというのは例えば135.11111と13.22222という経度と緯度を取得したら、DBからどのようにOrderbyを実行すれば近い順に並ぶのでしょうか?
 

違反報告

ベストアンサーに選ばれた回答

joseph_joey_tribbianiさん

面白そうな質問だね。答えを知らなかったから、僕も今回はじめて考えてみたんだ。。。だからベストなやり方じゃないかもだけど、、僕の考えたやり方は 「区域」 と 「並べ替え」 なんだ。

【ステップ1】 区域 で絞り込む
まず、地図を たとえば 0.1°単位 (距離だと11kmぐらい) の方眼紙で荒っぽく 区域 に分ける。プログラムでは 区域 は 緯度 と 経度 の 2次元配列 で表す。データを登録するときは、この 2次元配列 に データを登録しておく。こうしておけば、同じ 区域 に属する 地点同士 は 遠くても せいぜい 約16km 圏内に限定されるよね。もちろん GPS の地点 もどこかの 区域 に属することになるよね。

~こんなイメージだよぉ~

$区域[0][0] = array (データ1, データ2, データ3, ..., データ11)
$区域[0][1] = array (データ12)
$区域[0][2] = array ()
$区域[1][0] = array (データ13, データ14)


GPS地点の区域 … $区域 [(int) (GPS緯度 / 0.1)] [(int) (GPS経度 / 0.1)]


【ステップ2】 距離で並べ替え
同じ区域に属する全部の地点データについて、二点間の距離を求める関数 (※1) をつかって GPS の地点との距離が近い順で並べ替える。もしも、同じ区域に属するデータが存在しなかったら、その区域に隣接する周囲 8 つの区域について、並べ替えを実行する。

(※1) 距離を求める関数は自分で作るんだけどね。簡単なのでよければ 3平方の定理 でもいいだろうし、本格的なものなら球面上の距離を求めてもいいね。

こんな感じでどだろう

joseph_joey_tribbiani

引用元

更新:2010/04/21 17:12 カテゴリ: web開発  > 位置情報 ▲トップ

Python

フロントエンド開発

Docker

AWS

nginx

Node.JS

Linux

web開発

サーバ管理

GCP

svn・git

ソース・開発

プロマネ

HTML・CSS

JavaScript

Alexa

webサービス運用

webサービス

Mac

MySQL

PHP

FuelPHP

ツール, ライブラリ

ビジネス

テンプレート

プレゼン

マネタイズ

負荷・チューニング

Windows

メール

メール・手紙文例

CodeIgniter

オブジェクト指向

UI・フロントエンド

cloud

マークアップ・テキスト

Flash

デザイン

DBその他

Ruby

PostgreSQL

ユーティリティ・ソフト

Firefox

ハードウェア

Google

symfony

OpenPNE全般

OpenPNE2

Hack(賢コツ)

OpenPNE3

リンク

個人開発

その他

未確認

KVS

ubuntu

Android

負荷試験

オープンソース

社会

便利ツール

マネー

Twig

食品宅配

WEB設計

オーディオ

一般常識

アプリ開発

サイトマップ

うずら技術ブログ

たませんSNS

rss2.0