2010/2/8 月曜日 Posted in 記事紹介・リンク | No Comments »
CodeZineに良い記事がありましたのでご紹介します。 つい先日もご紹介させていただいた簡易アバターの記事と同じWINGSプロジェクトの片渕氏の執筆です。 → GPS携帯を使った口コミサイト構築 - PHPによるメールの受信処理 - [codezine.jp] 「GPS携帯を使った口コミサイト構築」というタイトルの記事ですが、前編となる今回ではGPSについては特に触れられていません。 作成するシステムは、座標の書かれたメール+添付画像をPHPスクリプトで取得し、GoogleMap上にそれを表示するという仕掛けなのですが、今回は主にそのメール受信部分についての解説となっています。 Linuxサーバ上でのpostfixを使ったメールの受信の仕方と、受け取ったメールデータの解析手法について丁寧にまとめられています。 メールデータの解析処理は、PEARのMail::mimeDecodeを使って行われています。 ケータイサイトでよく行われる空メールによる登録処理や、写真添付メールを受信するようなシステムを作成する際に、必ず必要になる仕掛けで、かなり実践的な内容になっていると思います。 私も以前この記事とほぼ同じような仕組みのシステムを作ったことがあるのですが、このサンプルプログラムがあればだいぶ楽ができましたね(笑) 紙面の都合からか、初心者の方には少しだけ説明不足気味なところもあるかもしれませんが、不足プログラムによるメール受信は、参考になる情報も少なかったりしますので、大変参考になる良記事だと思います。 後編にも期待したいところです。 関連: CodeZineに掲載されている記事「PHPで簡易デコメール/簡易アバター画像生成システムを作る」 ブックレビュー: PHP×携帯サイト デベロッパーズバイブル GPS座標を短い文字列で扱えるGeoHashが面白い Read more..2010/1/29 金曜日 Posted in 記事紹介・リンク | 4 Comments »
位置情報を短い文字列で扱うことのできるGeoHashというのが面白いのでご紹介します。 ケータイのGPSなどから取得する座標は通常「緯度・経度」という形で扱われます。 「+141.22.35.364, +43.3.14.112」みたいな感じですね。 ところがGeoHashでは、この座標は文字列で表され「xpssbxt2gpf」となります。 面白いことにこの文字列は、座標のように「点」を表しているのではなく「範囲(グリッド)」を表しています。 そして、この文字列は長ければ長いほど詳細な情報を持ちます。 つまり文字列を短くすると、より広い範囲を表すことになります。 例えば上の文字列から3文字削った「xpssbxt2」は、次のような範囲になります。 そこから更に2文字削った「xpssbx」は、より広い範囲を表すことになり、次のような範囲になります。(範囲が広すぎて表示しきれないので地図の縮尺も上げています) どうも説明が下手なので、恐らくわかるようなわからないような、という感じでしょう。 現在のところmasuidrive氏のブログが、日本語でGeoHashを一番詳しく解説しているのではないかと思われるので、ご紹介させていただきます。 (図解も多くわかりやすいと思います) → @masuidrive blog 緯度経度を文字列で表すGeoHash [blog.masuidrive.jp] また同時に実際にGeohashを試すことの出来るデモも公開されているようです。 → @masuidrive blog geohashデモアプリケーション [blog.masuidrive.jp] 「東京タワー」のような語句を入れて描画ボタンを押すと、GeoHash値とその範囲が表示されるはずです。 GeoHashは、既に色んな言語向けに実装が進んでいるようで、上記ブログでもRuby用のライブラリが公開されています。 英語版のWikipediaに各言語向けのリンクがあります。 私も上記リンクから辿ってPHPで試してみたのですが、どうもライブラリが簡素なものしかありませんでした。 検索してみたところ、「とりあえずPHP」というブログ内にGeoHashのデコード、エンコード、隣接する領域を取る関数のサンプルコードがありましたので活用させていただきました。 → とりあえずPHP Geohash関数 [mtcn.ko-me.com] 使い方はソースを見れば一目瞭然だと思いますが、こんな感じです。 // テスト用の座標 $lat_in = '43.06383'; $lon_in = '141.35744'; // 座標からGeoHash形式へ(3番目の引数は精度) $hash = geohash_encode($lat_in, $lon_in, 6); // GeoHash形式から座標へ $geo_arr = geohash_decode_interval($hash); $grid_x1 = $geo_arr[1][0]; // グリッドの左上の点 $grid_x2 = $geo_arr[1][1]; // グリッドの左下の点 $grid_y1 = $geo_arr[0][0]; // グリッドの右上の点 $grid_y2 = ... Read more..2009/6/3 水曜日 Posted in iPhone | No Comments »
久々にiPhoneネタです。 今年の夏にリリースされる予定のiPhone OS 3.0から、ケータイのようにブラウザ上から位置情報が取れるようになるとのことです。 情報元はこちらのブログです。 → Cirius Lab ブログ ついに iPhone Safari ブラウザから位置情報を取得できるようになります 位置情報の取得はJavaScriptを使って行うことになり、 navigator.geolocation.watchPosition(locupdate, handleError); のようにイベントハンドラを登録するだけで使えるようになるようです。 これでiPhoneでもケータイ電話のように、位置情報と連携したWebコンテンツが簡単につくれるようになります。 Ajaxが利用できる分、他サービスとのマッシュアップも簡単に行えますので、ケータイよりも更に色々と面白そうなものが作れそうです。 これは楽しみな機能ですね。 Read more..2008/10/10 金曜日 Posted in 記事紹介・リンク | No Comments »
ここギコ!さんのブログに、docomo端末GPSでの位置取得で詐称を防ぐ方法が載っていましたのでご紹介させていただきます。 → ここギコ! DoCoMoのGPSでの簡易詐称チェック [kokogiko.net] アイディアの元になったのはこちらのブログとのことです。 → GOGA スタッフブログ オープンiエリアの緯度経度を試してみた [goga.co.jp] 最近はGPSを使った位置情報と連動するようなゲームがあり、そのようなコンテンツの場合は、位置情報の詐称が問題になってきます。 特にドコモ端末は、過去履歴からも位置情報を送信する機能がついていたり、仕様上クエリーの文字列を簡単に書き換えたりすることができ、詐称が簡単にできる状態になっていました。 上記ブログで紹介されている対策方法は、 「GPSで取った座標と、オープンiエリアで取った座標とを比較する」 という方法です。 オープンiエリアはリダイレクトで位置が取れるので、作りを考慮すれば、リンクを一回押すだけでGPSとオープンiエリアの両方の座標が取れるとのことです。 (上記ブログ内にPerlで書かれたサンプルスクリプトがあります) この方法は目からウロコですね。 オープンiエリアの取得は早いので、レスポンスもあまり問題にならないでしょう。 位置情報を使ったコンテンツを作成予定の方は、ぜひ参考にしてみてはいかがでしょうか。 GPSの座標取得が遅いのでオープンiエリアの取得時間は気になりません 関連: ケータイのGPSから住所を取得(逆Geocoding)する方法 ケータイGPS情報の取得方法がまとめられた記事「【PHP TIPS】 96. 携帯電話でGPSデータを取得してみよう」 FOMAオープンiエリアの位置情報取得機能を試してみました Read more..2008/9/30 火曜日 Posted in DoCoMo, 記事紹介・リンク | No Comments »
アシアルさんのブログに、座標から住所を取得する方法やそのAPIをまとめた、「座標から地名を取得する逆GeocodingAPIのまとめ + サンプル」というエントリーが公開されています。 → アシアルブログ 座標から地名を取得する逆GeocodingAPIのまとめ + サンプル [blog.asial.co.jp] 住所→座標の取得は、GoogleのGeocodingという機能を使って実現できるのですが、その逆はGoogleのAPIには実装されていません。 上記エントリーでは、この逆Geocoding機能が使えるサービスをまとめて紹介しています。 またサンプルプログラムとして、「YahooローカルサーチAPI」を使った場合の例が掲載されています。 同じサンプルでは面白みがないので、その1つ下で紹介されている「ReFITS Lab 逆ジオコーディングサービス」を使って、ケータイのGPS機能から住所を取得するプログラムを作ってみました。 ※ドコモのGPS対応ケータイ用のサンプルです。 ※下記サービスを利用される際には必ず先に使用条件をご覧ください。 → ReFITS rgeocode.php - 逆ジオコーディングサービス [refits.cgk.affrc.go.jp] <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php // APIのURL(参照:http://refits.cgk.affrc.go.jp/tsrv/jp/rgeocode.html) $url = 'http://refits.cgk.affrc.go.jp/tsrv/jp/rgeocode.php?v=3&lat=%%ido%%&lon=%%keido%%'; if (!isset($_GET['lat']) or !isset($_GET['lon'])) { printf('<a href="%s" lcs>現在地を確認</a><br /><br />', $_SERVER['PHP_SELF']); } else { $ido = trim($_GET['lat']); $keido ... Read more..