はじめに
Google Mapsには、Google Maps Static API
というものがあって、パラメーターを渡すと、PNG画像を返してくれる。
これを散布図グラフの背景に設定すれば、地図上に散布図で示した情報をマッピングできるので、便利である。
しかし、Google Static Mapsは、例えばイントラネットに閉じたサービスでは使用できない。
Open Street Mapは、Creative Commons Attribution-ShareAlike 2.0 Genericでライセンスされているので、
このような環境でも使用できるのだが、tile.openstreetmap.orgのAPIは、
Google Static Maps APIとは指定の方法が違うようで、Google Static Maps用のパラメーター計算の方法がそのまま使えない。
調べてみると、staticmapliteというのが、Google Static Maps APIに類似のAPIで、
tile.openstreetmap.orgから画像を取得できるようだ。
特にズームの値の指定が一緒なのが大変助かる。
しかし、インストール方法も書かれていないのが難点だった。
後からよく調べてみると、
staticMapLiteExtと言うものもあって、こちらの方が高機能であるようだ。しかもインストール方法もちゃんと書かれている。
新規で導入するのであれば、こちらの方が良いかもしれない。
インストールの事前準備
今回は、nginxとphp-fpmを使って動かすことにしたため、
pkgsrc/www/nginxと
pkgsrc/www/php-fpm、
pkgsrc/www/php-curl、
pkgsrc/graphics/php-gd、
をインストールしておく。私の場合は、既にnginxでウェブサイトを構築しているため、新規にインストールはしなかった。
導入したPHPは、5.6.25である。
php-curlとphp-gdは、staticmapliteの動作に必要である。
php-fpmの設定
php-fpmは、localhostからのみ接続できるように、/usr/pkg/etc/php-fpm.confに
listen.allowed_clients = 127.0.0.1
を追加した。
nginxの設定
以下のような設定を/usr/pkg/etc/nginx/nginx.confに追加した。
http {
upstream php-handler {
server 127.0.0.1:9000;
}
}
server {
location /osm-staticmap/staticmaplite {
root /home/YOUR_NAME/osm;
}
location ~ ^(.+?\.php)(/.*)?$ {
root /home/YOUR_NAME/osm;
try_files $1 =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_pass php-handler;
}
}
このように設定した上で、php-fpmとnginxをrestartさせておく。
staticmapliteの配置
staticmapliteは~/osm/osm-staticmap/staticmaplite/staticmaplite.php
として配置するので、
以下のようにgithubからcloneしておく。
$ mkdir -p ~/osm/osm-staticmap
$ cd ~/osm/osm-staticmap
$ git clone git@github.com:dfacts/staticmaplite.git
動作確認
https://deuterium.ryoon.net/osm-staticmap/staticmaplite/のように表示されたら、正常に使用開始できている。
おまけ
デバッグメッセージの表示
標準ではエラーメッセージが表示されないので、動作確認中は、以下のように変更しておくと良いかもしれない。
diff --git a/staticmap.php b/staticmap.php
index a9855e5..118c399 100644
--- a/staticmap.php
+++ b/staticmap.php
@@ -25,8 +25,8 @@
*
*/
-error_reporting(0);
-ini_set('display_errors', 'off');
+error_reporting(1);
+ini_set('display_errors', 'on');
Class staticMapLite
{
右下のattributionの画像の変更
標準では、「(c) OpenStreetMap contributors」ではないので、使いにくい。
osm_logo.pngを置き換えてやれば良い。
画像の右下同士を合わせるので、ピクセル数を変えてもstaticmaplite.php等の変更は必要ない。
HTTPプロキシーの使用
イントラネットからインターネットに出るのに、HTTPプロキシーサーバーを経由しないといけない場合もあると思う。
staticmapliteは、php-curlを使っているので、curl_setoptのCURLOPT_HTTPPROXYTUNNEL等を設定してやれば良い。
例えば、認証が必要なHTTPプロキシーサーバーを経由する場合には、以下のようにする。
diff --git a/staticmap.php b/staticmap.php
index a9855e5..4851575 100644
--- a/staticmap.php
+++ b/staticmap.php
@@ -339,6 +345,12 @@ Class staticMapLite
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0");
curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
+ curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
+ curl_setopt($ch, CURLOPT_PROXYPORT, '8080');
+ curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+ curl_setopt($ch, CURLOPT_PROXY, 'http://PROXYSERVER');
+ curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'USERNAME:PASSWORD');
$tile = curl_exec($ch);
curl_close($ch);
if ($tile && $this->useTileCache) {