PHPで携帯電話用のGoogleマップを作成する

(1/1)
今回は、「PHPでGoogleを利用して住所から緯度・経度を求める」の応用で、住所を指定して、携帯電話用のGoogleマップを作成するプログラムをつくってみることにする。

(2025年8月30日).pahooEnv導入, pahooInputDat導入

サンプル・プログラム:実行例

PHPで携帯電話用のGoogleマップを作成する
上図はサンプル・プログラムの画面イメージである。
住所(必須)、目的地、目的地URLを入力し「作成」ボタンをクリックすることで、画面下段のようにGoogleマップ(静止画)と、目的地へのリンクを表示する。そして、これを表示するためのHTMLをtextarea内に表示する。
また、画面の表示幅、表示高、地図の拡大率を指定できるようになっている。

目次

サンプル・プログラム

圧縮ファイルの内容
getGoogleMapStd.phpサンプル・プログラム本体。
pahooGeoCode.php住所・緯度・経度に関わるクラス pahooGeoCode。
使い方は「PHPで住所・ランドマークから最寄り駅を求める」「PHPで住所・ランドマークから緯度・経度を求める」などを参照。include_path が通ったディレクトリに配置すること。
getGoogleMapStd.php 更新履歴
バージョン 更新日 内容
3.4.0 2025/08/30 .pahooEnv導入, pahooInputDat導入
3.3 2021/10/10 PHP8対応,リファラ・チェック改良など
3.2 2018/12/30 JavaScriptのコピー機能を pahooClipboard に変更
3.1 2018/02/20 GoogleMaps Geocoding API 最新版に対応
3.0 2016/01/16 pahooGeoCode使用,Google Static Maps V2対応
pahooGeoCode.php 更新履歴
バージョン 更新日 内容
6.8.0 2025/08/10 アクセスキーなどを ".pahooEnd" に分離
6.7.1 2025/07/26 jsLine_Gmap() - bug-fix
6.7.0 2025/07/20 drawJSmap,drawGMap -- 引数 $markerLevel 追加
6.6.0 2025/07/19 drawJSmap,drawGMap,drawLeaflet -- マップ中心マーカー表示引数を追加
6.5.0 2025/06/14 GoogleMaps JavaScript APIの変更に対応
pahooInputData.php 更新履歴
バージョン 更新日 内容
2.0.1 2025/08/11 getParam() bug-fix
2.0.0 2025/08/11 pahooLoadEnv() 追加
1.9.0 2025/07/26 getParam() 引数に$trim追加
1.8.1 2025/03/15 validRegexPattern() debug
1.8.0 2024/11/12 validRegexPattern() 追加

準備:PHP の https対応

クラウド連携や相手先サイトのデータを読み込むのに https通信を使うため、PHPに OpenSSLモジュールが組み込まれている必要がある。関数  phpinfo  を使って、下図のように表示されればOKだ。
OpenSSL - PHP
そうでない場合は、次の手順に従ってOpenSSLを有効化し、PHPを再起動させる必要がある。

Windowsでは、"php.ini" の下記の行を有効化する。
extension=php_openssl.dll
Linuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順

これで準備は完了だ。

準備:pahooGeoCode クラス

pahooGeoCode.php

  40: class pahooGeoCode {
  41:     public $items;      // 検索結果格納用
  42:     public $error;      // エラー・フラグ
  43:     public $errmsg;     // エラー・メッセージ
  44:     public $hits;       // 検索ヒット件数
  45:     public $webapi// 直前に呼び出したWebAPI URL
  46: 
  47:     // -- 以下のデータは .env ファイルに記述可能
  48:     // Google Cloud Platform APIキー
  49:     // https://cloud.google.com/maps-platform/
  50:     // ※Google Maps APIを利用しないのなら登録不要
  51:     public $GOOGLE_API_KEY_1 = '';      // HTTPリファラ用
  52:     public $GOOGLE_API_KEY_2 = '';      // IP制限用
  53:     public $GOOGLE_MAP_ID    = '';      // GoogleMaps ID
  54: 
  55:     // Yahoo! JAPAN Webサービス アプリケーションID
  56:     // https://e.developer.yahoo.co.jp/register
  57:     // ※Yahoo! JAPAN Webサービスを利用しないのなら登録不要
  58:     public $YAHOO_APPLICATION_ID = '';
  59: 
  60:     // OSM Nominatim Search API利用時に知らせるメールアドレス
  61:     // https://wiki.openstreetmap.org/wiki/JA:Nominatim#.E6.A4.9C.E7.B4.A2
  62:     // ※OSM Nominatim Search APIを利用しないのなら登録不要
  63:     public $NOMINATIM_EMAIL = '';
  64: 
  65:     // IP2Location.io APIキー
  66:     // https://www.ip2location.io/
  67:     // ※IP2Location.ioを利用しないのなら登録不要
  68:     public $IP2LOCATION_API_KEY = '';

GoogleマップやLeafletなどによる地図描画や住所検索を行うためのクラスが pahooGeoCode である。同梱のクラス・ファイル "pahooGeoCode.php" は include_path が通ったディレクトリに配置してほしい。他のプログラムでも pahooGeoCodeクラス を利用するが、常に最新のクラス・ファイルを1つ配置すればよい。

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

PHPのクラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。

準備:pahooInputData 関数群

PHPのバージョンや入力データのバリデーションなど、汎用的に使う関数群を収めたファイル "pahooInputData.php" が同梱されているが、include_path が通ったディレクトリに配置してほしい。他のプログラムでも "pahooInputData.php" を利用するが、常に最新のファイルを1つ配置すればよい。

また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .pahooEnv ファイルから読み込む関数 pahooLoadEnv を備えている。こちらについては、「各種クラウド連携サービス(WebAPI)の登録方法」をご覧いただきたい。

サンプル・プログラムの流れ

PHPで携帯電話用のGoogleマップを作成する

解説:GoogleMaps staticmap

pahooGeoCode.php

携帯電話用の画像URLは、メソッド getStaticMap を使って取得する。

解説:パラメータの取得

pahooGeoCode.php

受け取った住所を緯度・経度に変換するメソッド searchPoint2 については、「PHPでGoogleを利用して住所から緯度・経度を求める」で作成したものと同じなので解説を割愛する。
ここでは、パラメータを受け取る際のバリデーション処理について説明する。

本プログラムは、HTML FORMでパラメータを入力し、自分自身(スクリプト)を呼び出すものであるが、悪意のある第三者が悪意のあるパラメータを使ってスクリプトを呼び出すかもしれない。そこで、パラメータがプログラムに悪影響を及ぼさないかどうかチェックする必要がある。
データのバリデーション機能は、PEARのようなフレームワークに用意されているのだが、ここでは、整数をチェックする getParam_validateInt と文字列をチェックする getParam_validateStr という2つのユーザー関数を用意することにした。

getGoogleMapStd.php

まず、整数値をチェックするユーザー関数 getParam_validateInt であるが、
  1. パラメータが存在するかどうか
  2. 整数かどうか
  3. 指定した最大値・最小値の範囲にあるかどうか
の3点をチェックするものである。これらのチェックをクリアしたものは整数値そのものを、いずれかで異常が発生した場合にはデフォルト値 $def を返す。

「整数かどうか」のチェックでは、組み込み関数  is_int  を使おうと考えたが、HTML FORM からの入力を判定できない(文字列と認識してしまう)ため、 preg_match  により正規表現で判定することにした。

getGoogleMapStd.php

次に、文字列をチェックするユーザー関数 getParam_validateStr であるが、
  1. パラメータが存在するかどうか
  2. 指定した最長値・最短値の範囲にあるかどうか
の2点をチェックするとともに、文字コードを指定されたコードに変換する処理を加えている。これらのチェックをクリアしたものは、関数  strip_tags  によりタグを取り除き、関数  htmlspecialchars  により特殊文字を変換してリターンする。
チェック工程のいずれかで異常が発生した場合には '' を返す。

参考サイト

(この項おわり)
header