目次
サンプル・プログラムの実行例

サンプル・プログラムのダウンロード
ip2address.php | サンプル・プログラム本体。 |
pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」「PHPで住所・ランドマークから緯度・経度を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
バージョン | 更新日 | 内容 |
---|---|---|
1.0.0 | 2022/12/31 | 初版 |
バージョン | 更新日 | 内容 |
---|---|---|
6.3.3 | 2024/09/14 | $this->NOMINATIM_EMAIL 追加 |
6.3.2 | 2024/02/14 | getStaticMap() -- bug-fix |
6.3.1 | 2023/07/09 | bug-fix |
6.3.0 | 2023/07/02 | getPointsGSI()追加 |
6.2.0 | 2023/07/02 | ip2address()追加 |
バージョン | 更新日 | 内容 |
---|---|---|
1.5.0 | 2024/01/28 | exitIfExceedVersion() 追加 |
1.4.2 | 2024/01/28 | exitIfLessVersion() メッセージ修正 |
1.4.1 | 2023/09/30 | コメントの訂正 |
1.4.0 | 2023/09/09 | $_GET, $_POST参照をfilter_input()関数に置換 |
1.3.0 | 2023/07/11 | roundFloat() 追加 |
サンプル・プログラムの流れ

準備:pahooGeoCode クラス
37: class pahooGeoCode {
38: var $items; //検索結果格納用
39: var $error; //エラー・フラグ
40: var $errmsg; //エラー・メッセージ
41: var $hits; //検索ヒット件数
42: var $webapi; //直前に呼び出したWebAPI URL
43:
44: //Google Cloud Platform APIキー
45: //https://cloud.google.com/maps-platform/
46: //※Google Maps APIを利用しないのなら登録不要
47: var $GOOGLE_API_KEY_1 = '**************************'; //HTTPリファラ用
48: var $GOOGLE_API_KEY_2 = '**************************'; //IP制限用
49:
50: //Yahoo! JAPAN Webサービス アプリケーションID
51: //https://e.developer.yahoo.co.jp/register
52: //※Yahoo! JAPAN Webサービスを利用しないのなら登録不要
53: var $YAHOO_APPLICATION_ID = '*****************************';
54:
55: //OSM Nominatim Search API利用時に知らせるメールアドレス
56: //https://wiki.openstreetmap.org/wiki/JA:Nominatim#.E6.A4.9C.E7.B4.A2
57: var $NOMINATIM_EMAIL = '*****************************';
58:
59: //ジオどすII APIキー【廃止】
60: //http://geodosu.com/user/register
61: var $APIKEY_GEODOS = '*****************';
62:
63: //IP2Location.io APIキー
64: //https://www.ip2location.io/
65: //※IP2Location.ioを利用しないのなら登録不要
66: var $IP2LOCATION_API_KEY = '*****************';
クラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。

地図や住所検索として Google を利用するのであれば、Google Cloud Platform APIキー が必要で、その入手方法は「Google Cloud Platform - WebAPIの登録方法」を、Yahoo!JAPAN を利用するのであれば、Yahoo! JAPAN Webサービス アプリケーションIDが必要で、その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を、それぞれ参照されたい。

IP2Location.io の APIキーの入手方法は、「IP2Location.io - WebAPIの登録方法」を参照されたい。
準備:地図サービスの選択
住所検索サービスは、Google、Yahoo!JAPAN、HeartRails Geo APIから選べる。あらかじめ、定数 GEOSERVICE に値を設定すること。
逆ジオコーディングサービスは、Google、Yahoo!JAPAN、HeartRails Geo API、簡易ジオコーディングサービスから選べる。あらかじめ、定数 REVGEOSERVICE に値を設定すること。
解説:IP2Location.io による位置情報取得
URL |
---|
https://api.ip2location.io/ |
フィールド名 | 要否 | 内 容 |
---|---|---|
key | 必須 | IP2LOCATION.IO IP GEOLOCATION APIを利用するためのアプリケーション・キー |
ip | 必須 | 検索するIPアドレス(IPv4またはIPv6) |
format | 省略可能 | 出力書式。jsonまたはxml |
lang | 省略可能 | 言語。ISO639-1による。日本なら ja |
解説:IP2LOCATION.IO IP GEOLOCATION APIの呼び出し
解説:メイン・プログラム
287: //IPアドレスはREMOTE_ADDRから取得
288: $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
289: if (is_ipadr($ip) == FALSE) $ip = '';
290: if ($ip == '') $ip = DEF_QUERY;
314: //ホスト名→IPアドレス変換
315: if (($host = is_host($query)) != FALSE) {
316: $ip = gethostbyname($host);
317: } else {
318: $ip = $query;
319: }
329: //エラーがなければ緯度・経度に代入
330: if ($res != FALSE) {
331: $latitude = $res[0];
332: $longitude = $res[1];
333: //緯度・経度から住所を取得
334: $arr = $pgc->getAddress3($latitude, $longitude, REVGEOSERVICE);
335: if ($arr != FALSE) {
336: //住所は都道府県+市町村
337: $address = $arr['prefecture'] . $arr['city'];
338: //マップに表示する情報ウィンドウの内容
339: $description = "IPアドレス:{$ip}<br />住所:{$address}<br />緯度:{$latitude},経度:{$longitude}";
340: $items[1] = array(
341: 'latitude' => $latitude,
342: 'longitude' => $longitude,
343: 'title' => '',
344: 'description' => $description
345: );
346: }
347: } else {
348: $errmsg = $pgc->geterror();
349: }
ここでは IP2Location.io の無償ライセンスを利用していることから位置情報の精度が低いため、住所として市町村名まで取得するようにした。
参考サイト
- IP2Location.io
- WebAPIの登録方法:ぱふぅ家のホームページ
- PHPで住所・ランドマークから緯度・経度を求める:ぱふぅ家のホームページ
- IPアドレスとドメイン名を相互変換する:ぱふぅ家のホームページ
- PHPでユーザー・アクセス情報を表示する:ぱふぅ家のホームページ
- PHPで緯度・経度から住所を求める:ぱふぅ家のホームページ
これと、Googleや地理院地図、オープンストリートマップの地図サービスをクラウド連携することで、アクセスしているIPアドレスやホスト名から住所を求めるPHPプログラムを作ってみることにする。