45
HTML5 canvasGoogle Maps API 遊んでみた はてな Id:babydaemons Twitter babydaemons

Html5 canvasとgoogle maps apiで遊んでみた

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Html5 canvasとgoogle maps apiで遊んでみた

HTML5 canvasと

Google Maps APIで遊んでみた

はてな Id:babydaemonsTwitter babydaemons

Page 2: Html5 canvasとgoogle maps apiで遊んでみた

自己紹介

・ 35歳、妻一人、男の子一人 ・ 組込系・制御系から

オープン系・業務系までこなす ホントはWeb系がやりたいPG/SE

・ 中小企業ブラックから 中堅企業ブラックへ転職: →エイチームさんには落ちましたorz

・ Perfume “JPN”がマイブーム

Page 3: Html5 canvasとgoogle maps apiで遊んでみた

Agenda ・ そもそも何作ったのさ?? ・ Google Maps APIの情報は?? ・ Google Mapsを組み込むには?? ・ 地図上の座標を取得するには?? ・ 指定座標の地図を取得するには?? ・ 取得した地図を貼り合わせるには?? ・ 貼りあわせた地図を保存するには?? ・ その他、バッドノウハウ

Page 4: Html5 canvasとgoogle maps apiで遊んでみた

Agenda ・ そもそも何作ったのさ?? ・ Google Maps APIの情報は?? ・ Google Mapsを組み込むには?? ・ 地図上の座標を取得するには?? ・ 指定座標の地図を取得するには?? ・ 取得した地図を貼り合わせるには?? ・ 貼りあわせた地図を保存するには?? ・ その他、バッドノウハウ

Page 5: Html5 canvasとgoogle maps apiで遊んでみた

Demo

Page 6: Html5 canvasとgoogle maps apiで遊んでみた

Agenda ・ そもそも何作ったのさ?? ・ Google Maps APIの情報は?? ・ Google Mapsを組み込むには?? ・ 地図上の座標を取得するには?? ・ 指定座標の地図を取得するには?? ・ 取得した地図を貼り合わせるには?? ・ 貼りあわせた地図を保存するには?? ・ その他、バッドノウハウ

Page 7: Html5 canvasとgoogle maps apiで遊んでみた

http://code.google.com/intl/ja/apis/maps/

日本語情報完備!

Page 8: Html5 canvasとgoogle maps apiで遊んでみた

今回使うのは: ・ Maps JavaScript API ・ Static Maps API

Page 9: Html5 canvasとgoogle maps apiで遊んでみた

Agenda ・ そもそも何作ったのさ?? ・ Google Maps APIの情報は?? ・ Google Mapsを組み込むには?? ・ 地図上の座標を取得するには?? ・ 指定座標の地図を取得するには?? ・ 取得した地図を貼り合わせるには?? ・ 貼りあわせた地図を保存するには?? ・ その他、バッドノウハウ

Page 10: Html5 canvasとgoogle maps apiで遊んでみた

とても簡単。指定した<div>要素を

APIに渡すだけ。

Page 11: Html5 canvasとgoogle maps apiで遊んでみた

var center = new google.maps.LatLng(35.700000, 137.000000);

var mapOptions = { zoom: 5, center: center, mapTypeId: google.maps.MapTypeId.ROADMAP};

var map = new google.maps.Map($("#map")[0], mapOptions);

Page 12: Html5 canvasとgoogle maps apiで遊んでみた

Agenda ・ そもそも何作ったのさ?? ・ Google Maps APIの情報は?? ・ Google Mapsを組み込むには?? ・ 地図上の座標を取得するには?? ・ 指定座標の地図を取得するには?? ・ 取得した地図を貼り合わせるには?? ・ 貼りあわせた地図を保存するには?? ・ その他、バッドノウハウ

Page 13: Html5 canvasとgoogle maps apiで遊んでみた

こいつを使えばよいっぽい↓

MapCanvasProjectionクラス:

・ fromLatLngToDivPixel() ・ fromDivPixelToLatLng()

Page 14: Html5 canvasとgoogle maps apiで遊んでみた

だけど、このインスタンスを取得する方法が判らない。orz

Page 15: Html5 canvasとgoogle maps apiで遊んでみた

しょうがないのでググりましたwhttp://www.mwsoft.jp/

programming/googlemap/google_map_v3_custom_overlay.html

Page 16: Html5 canvasとgoogle maps apiで遊んでみた

OverlayViewを継承して、

オレオレマーカーを作るしか無いっぽい。

Page 17: Html5 canvasとgoogle maps apiで遊んでみた

function BoundsMarker(map, latLng) { this._latLng = latLng; this.setMap(map);}BoundsMarker.prototype = new google.maps.OverlayView();

Page 18: Html5 canvasとgoogle maps apiで遊んでみた

オレオレマーカーのインスタンスを作れば、それから取得できる。

var projection = marker.getProjection();

Page 19: Html5 canvasとgoogle maps apiで遊んでみた

Agenda ・ そもそも何作ったのさ?? ・ Google Maps APIの情報は?? ・ Google Mapsを組み込むには?? ・ 地図上の座標を取得するには?? ・ 指定座標の地図を取得するには?? ・ 取得した地図を貼り合わせるには?? ・ 貼りあわせた地図を保存するには?? ・ その他、バッドノウハウ

Page 20: Html5 canvasとgoogle maps apiで遊んでみた

今回使うのは: ・ Maps JavaScript API ・ Static Maps API

Page 21: Html5 canvasとgoogle maps apiで遊んでみた

使用制限 ・ 1人の閲覧者が1日にリクエスト

できるユニークな(一意の)画像は1000 件まで!!

・ 24 時間内の制限を超えた場合や サービスを不正に使用した場合は一時的に機能しなくなる!!

・ 制限を超える日が続くと アクセスがブロックされる!!

Page 22: Html5 canvasとgoogle maps apiで遊んでみた

エンドポイントにパラメータを指定してGETする: ・ sensor GPSから取得? ・ center 地図の中心座標

・ size 地図のサイズ(pixel) ・ zoom ズームレベル

...etc

http://maps.google.com/maps/api/staticmap

Page 23: Html5 canvasとgoogle maps apiで遊んでみた

OverlayViewを継承して、

オレオレマーカーを作るしか無いっぽい。

Page 24: Html5 canvasとgoogle maps apiで遊んでみた

var img = new Image();var url = endpoint + "?" + params.join("&");img.onload = function() { /* 画像取得後の処理 */ }img.url = url;

Page 25: Html5 canvasとgoogle maps apiで遊んでみた

オレオレマーカーのインスタンスを作れば、それから取得できる。

var projection = marker.getProjection();

Page 26: Html5 canvasとgoogle maps apiで遊んでみた

Agenda ・ そもそも何作ったのさ?? ・ Google Maps APIの情報は?? ・ Google Mapsを組み込むには?? ・ 地図上の座標を取得するには?? ・ 指定座標の地図を取得するには?? ・ 取得した地図を貼り合わせるには?? ・ 貼りあわせた地図を保存するには?? ・ その他、バッドノウハウ

Page 27: Html5 canvasとgoogle maps apiで遊んでみた

HTML5 <canvas>ペイントやGIMPみたいなドロー系ソフトっぽい機能をJavaScript APIで提供

Page 28: Html5 canvasとgoogle maps apiで遊んでみた

超絶参考http://www.html5.jp/canvas/

Page 29: Html5 canvasとgoogle maps apiで遊んでみた

var canvas = $(“canvas”)[0];var context = canvas.getContext(“2d”)context.drawImage( img, 0, 0, width, height, dx, dy, width, height);

Page 30: Html5 canvasとgoogle maps apiで遊んでみた

Agenda ・ そもそも何作ったのさ?? ・ Google Maps APIの情報は?? ・ Google Mapsを組み込むには?? ・ 地図上の座標を取得するには?? ・ 指定座標の地図を取得するには?? ・ 取得した地図を貼り合わせるには?? ・ 貼りあわせた地図を保存するには?? ・ その他、バッドノウハウ

Page 31: Html5 canvasとgoogle maps apiで遊んでみた

<canvas>のAPI:toDataURL()

を使う

Page 32: Html5 canvasとgoogle maps apiで遊んでみた

var canvas = $(“canvas”)[0];var context = canvas.getContext(“2d”);

/* ここで何か描画 */

var url = canvas.toDataURL(“image/png”);$(“a#download”).attr(“href”, url);

Page 33: Html5 canvasとgoogle maps apiで遊んでみた

ただし、toDataURL()には

セキュリテイ上の使用制限がある!!

Page 34: Html5 canvasとgoogle maps apiで遊んでみた

それは:HTMLやJavaScriptの

ダウンロード元と、画像ファイルのダウンロード元が

一致している必要がある。

※画像が盗めちゃうから

Page 35: Html5 canvasとgoogle maps apiで遊んでみた

ダメじゃん!!保存できないじゃん!!

Page 36: Html5 canvasとgoogle maps apiで遊んでみた

localhostにサーバ立てて

HTMLとJavaScriptとStatic Maps Wrapperを

そこに置けば解決w

Page 37: Html5 canvasとgoogle maps apiで遊んでみた

<?php$userAgents = array(/* 中略 */);

$baseUrl = "http://maps.google.com/maps/api/staticmap?";

$url = $baseUrl . $_SERVER['QUERY_STRING'];

$userAgent = $userAgents[mt_rand(0, count($userAgents) - 1)];

/* 続く */

Page 38: Html5 canvasとgoogle maps apiで遊んでみた

/* 続き */

$opts = array( 'http' => array( 'method' => "GET", 'header' => "Accept-Language: " . $_SERVER['HTTP_ACCEPT_LANGUAGE'] . "\r\n" . "User-Agent: " . $userAgent . "\r\n" ));$context = stream_context_create($opts);$handle = fopen($url, "rb", false, $context);$contents = stream_get_contents($handle);

/* 続く */

Page 39: Html5 canvasとgoogle maps apiで遊んでみた

/* 続き */

$wanted = "Content-Type: ";foreach ($http_response_header as $http_header) { if (stripos($http_header, $wanted, 0) == 0) { header($http_header); }}

fclose($handle);

echo $contents;?>

Page 40: Html5 canvasとgoogle maps apiで遊んでみた

Agenda ・ そもそも何作ったのさ?? ・ Google Maps APIの情報は?? ・ Google Mapsを組み込むには?? ・ 地図上の座標を取得するには?? ・ 指定座標の地図を取得するには?? ・ 取得した地図を貼り合わせるには?? ・ 貼りあわせた地図を保存するには?? ・ その他、バッドノウハウ

Page 41: Html5 canvasとgoogle maps apiで遊んでみた

Static Maps APIの制限を掻い潜らなければ

ならない!!

Page 42: Html5 canvasとgoogle maps apiで遊んでみた

基本はコレ↓

Page 43: Html5 canvasとgoogle maps apiで遊んでみた

その1:User-Agentをランダム化する

Page 44: Html5 canvasとgoogle maps apiで遊んでみた

その2:Query Stringの

順序をランダム化する

Page 45: Html5 canvasとgoogle maps apiで遊んでみた

その3:座標の走査順序を

ランダム化する