SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
HTML5 canvasと
Google Maps APIで
    遊んでみた

  はてな Id:babydaemons
 Twitter babydaemons
自己紹介
・ 35歳、妻一人、男の子一人
・ 組込系・制御系から
  オープン系・業務系までこなす
  ホントはWeb系がやりたいPG/SE
・ 中小企業ブラックから
  中堅企業ブラックへ転職:
  →エイチームさんには落ちましたorz
・ Perfume “JPN”がマイブーム
Agenda
・   そもそも何作ったのさ??
・   Google Maps APIの情報は??
・   Google Mapsを組み込むには??
・   地図上の座標を取得するには??
・   指定座標の地図を取得するには??
・   取得した地図を貼り合わせるには??
・   貼りあわせた地図を保存するには??
・   その他、バッドノウハウ
Agenda
・   そもそも何作ったのさ??
・   Google Maps APIの情報は??
・   Google Mapsを組み込むには??
・   地図上の座標を取得するには??
・   指定座標の地図を取得するには??
・   取得した地図を貼り合わせるには??
・   貼りあわせた地図を保存するには??
・   その他、バッドノウハウ
Demo
Agenda
・   そもそも何作ったのさ??
・   Google Maps APIの情報は??
・   Google Mapsを組み込むには??
・   地図上の座標を取得するには??
・   指定座標の地図を取得するには??
・   取得した地図を貼り合わせるには??
・   貼りあわせた地図を保存するには??
・   その他、バッドノウハウ
http://code.google.com/
   intl/ja/apis/maps/



日本語情報完備!
今回使うのは:
・ Maps JavaScript API
・ Static Maps API
Agenda
・   そもそも何作ったのさ??
・   Google Maps APIの情報は??
・   Google Mapsを組み込むには??
・   地図上の座標を取得するには??
・   指定座標の地図を取得するには??
・   取得した地図を貼り合わせるには??
・   貼りあわせた地図を保存するには??
・   その他、バッドノウハウ
とても簡単。
指定した<div>要素を
 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);
Agenda
・   そもそも何作ったのさ??
・   Google Maps APIの情報は??
・   Google Mapsを組み込むには??
・   地図上の座標を取得するには??
・   指定座標の地図を取得するには??
・   取得した地図を貼り合わせるには??
・   貼りあわせた地図を保存するには??
・   その他、バッドノウハウ
こいつを使えばよいっぽい↓

MapCanvasProjectionクラス:
・ fromLatLngToDivPixel()
・ fromDivPixelToLatLng()
だけど、
このインスタンスを
 取得する方法が
 判らない。orz
しょうがないので
    ググりましたw
       http://www.mwsoft.jp/
     programming/googlemap/
google_map_v3_custom_overlay.html
OverlayViewを
   継承して、
 オレオレマーカーを
作るしか無いっぽい。
function BoundsMarker(map, latLng) {
  this._latLng = latLng;
  this.setMap(map);
}
BoundsMarker.prototype =
   new google.maps.OverlayView();
オレオレマーカーの
インスタンスを作れば、
それから取得できる。
var projection =
  marker.getProjection();
Agenda
・   そもそも何作ったのさ??
・   Google Maps APIの情報は??
・   Google Mapsを組み込むには??
・   地図上の座標を取得するには??
・   指定座標の地図を取得するには??
・   取得した地図を貼り合わせるには??
・   貼りあわせた地図を保存するには??
・   その他、バッドノウハウ
今回使うのは:
・ Maps JavaScript API
・ Static Maps API
使用制限
・ 1人の閲覧者が1日にリクエスト
  できるユニークな(一意の)画像は
 1000 件まで!!
・ 24 時間内の制限を超えた場合や
  サービスを不正に使用した場合は
 一時的に機能しなくなる!!
・ 制限を超える日が続くと
  アクセスがブロックされる!!
エンドポイントにパラメータを
指定してGETする:
・   sensor     GPSから取得?
・   center     地図の中心座標
・   size       地図のサイズ(pixel)
・   zoom       ズームレベル
                         ...etc
http://maps.google.com/maps/api/staticmap
OverlayViewを
   継承して、
 オレオレマーカーを
作るしか無いっぽい。
var img = new Image();
var url =
   endpoint + "?" + params.join("&");
img.onload = function() {
   /* 画像取得後の処理 */
 }
img.url = url;
オレオレマーカーの
インスタンスを作れば、
それから取得できる。
var projection =
  marker.getProjection();
Agenda
・   そもそも何作ったのさ??
・   Google Maps APIの情報は??
・   Google Mapsを組み込むには??
・   地図上の座標を取得するには??
・   指定座標の地図を取得するには??
・   取得した地図を貼り合わせるには??
・   貼りあわせた地図を保存するには??
・   その他、バッドノウハウ
HTML5 <canvas>
ペイントやGIMPみたいな
ドロー系ソフトっぽい機能を
JavaScript APIで提供
超絶参考
http://www.html5.jp/canvas/
var canvas = $(“canvas”)[0];
var context =
  canvas.getContext(“2d”)
context.drawImage(
  img, 0, 0, width, height,
  dx, dy, width, height);
Agenda
・   そもそも何作ったのさ??
・   Google Maps APIの情報は??
・   Google Mapsを組み込むには??
・   地図上の座標を取得するには??
・   指定座標の地図を取得するには??
・   取得した地図を貼り合わせるには??
・   貼りあわせた地図を保存するには??
・   その他、バッドノウハウ
<canvas>のAPI:
 toDataURL()
    を使う
var canvas = $(“canvas”)[0];
var context =
  canvas.getContext(“2d”);

/* ここで何か描画 */

var url =
   canvas.toDataURL(“image/png”);
$(“a#download”).attr(“href”, url);
ただし、
toDataURL()には
  セキュリテイ上の
 使用制限がある!!
それは:
 HTMLやJavaScriptの
   ダウンロード元と、
画像ファイルのダウンロード元が
 一致している必要がある。

 ※画像が盗めちゃうから
ダメじゃん!!
保存できないじゃん!!
localhostにサーバ立てて
  HTMLとJavaScriptと
Static Maps Wrapperを
    そこに置けば解決w
<?php
$userAgents = array(/* 中略 */);

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

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

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

/* 続く */
/* 続き */

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

/* 続く */
/* 続き */

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

fclose($handle);

echo $contents;
?>
Agenda
・   そもそも何作ったのさ??
・   Google Maps APIの情報は??
・   Google Mapsを組み込むには??
・   地図上の座標を取得するには??
・   指定座標の地図を取得するには??
・   取得した地図を貼り合わせるには??
・   貼りあわせた地図を保存するには??
・   その他、バッドノウハウ
Static Maps APIの
制限を掻い潜らなければ
     ならない!!
基本はコレ↓
その1:
User-Agentを
ランダム化する
その2:
 Query Stringの
順序をランダム化する
その3:
座標の走査順序を
 ランダム化する

Contenu connexe

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

Geolocation2
Geolocation2Geolocation2
Geolocation2Jun Chiba
 
Qtiles plugin for QGIS
Qtiles plugin for QGISQtiles plugin for QGIS
Qtiles plugin for QGISHideo Harada
 
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜Unity Technologies Japan K.K.
 
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)OSgeo Japan
 
ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話
ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話
ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話Kosuke Asahi
 
Lecuture on Deep Learning API
Lecuture on Deep Learning APILecuture on Deep Learning API
Lecuture on Deep Learning APINaoki Watanabe
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころAyumi Goto
 
WWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph AlgorithmsWWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph Algorithmscyberagent
 
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得Atsushi Tadokoro
 
asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?Yosuke Onoue
 
俺とシビックテックとDiy
俺とシビックテックとDiy俺とシビックテックとDiy
俺とシビックテックとDiyMasayuki KaToH
 
Google mapとgps機能を使ってみた。
Google mapとgps機能を使ってみた。Google mapとgps機能を使ってみた。
Google mapとgps機能を使ってみた。Eiichi Tsuru
 
Webアプリケーション開発での位置情報活用
Webアプリケーション開発での位置情報活用Webアプリケーション開発での位置情報活用
Webアプリケーション開発での位置情報活用Masakazu Muraoka
 
JavaScriptでいいじゃなイカ
JavaScriptでいいじゃなイカJavaScriptでいいじゃなイカ
JavaScriptでいいじゃなイカYuuichi Akagawa
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門Yohta Kanke
 

Similaire à Html5 canvasとgoogle maps apiで遊んでみた (20)

Hadoop事始め
Hadoop事始めHadoop事始め
Hadoop事始め
 
Geolocation2
Geolocation2Geolocation2
Geolocation2
 
Qtiles plugin for QGIS
Qtiles plugin for QGISQtiles plugin for QGIS
Qtiles plugin for QGIS
 
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
 
Yolp30分クッキング 2012北海道
Yolp30分クッキング 2012北海道Yolp30分クッキング 2012北海道
Yolp30分クッキング 2012北海道
 
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
 
ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話
ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話
ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話
 
Lecuture on Deep Learning API
Lecuture on Deep Learning APILecuture on Deep Learning API
Lecuture on Deep Learning API
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころ
 
WWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph AlgorithmsWWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph Algorithms
 
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
 
asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?
 
俺とシビックテックとDiy
俺とシビックテックとDiy俺とシビックテックとDiy
俺とシビックテックとDiy
 
Google mapとgps機能を使ってみた。
Google mapとgps機能を使ってみた。Google mapとgps機能を使ってみた。
Google mapとgps機能を使ってみた。
 
LeafletでWebGIS入門
LeafletでWebGIS入門LeafletでWebGIS入門
LeafletでWebGIS入門
 
Trat sprint6
Trat sprint6Trat sprint6
Trat sprint6
 
Webアプリケーション開発での位置情報活用
Webアプリケーション開発での位置情報活用Webアプリケーション開発での位置情報活用
Webアプリケーション開発での位置情報活用
 
Gaelyk
GaelykGaelyk
Gaelyk
 
JavaScriptでいいじゃなイカ
JavaScriptでいいじゃなイカJavaScriptでいいじゃなイカ
JavaScriptでいいじゃなイカ
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門
 

Plus de 真吾 森

Money forwardとりそなVISAデビットの関係を良くしたい
Money forwardとりそなVISAデビットの関係を良くしたいMoney forwardとりそなVISAデビットの関係を良くしたい
Money forwardとりそなVISAデビットの関係を良くしたい真吾 森
 
最底辺から送る目指せ最底辺の振り返り #-0.5
最底辺から送る目指せ最底辺の振り返り #-0.5最底辺から送る目指せ最底辺の振り返り #-0.5
最底辺から送る目指せ最底辺の振り返り #-0.5真吾 森
 
[2011.09.17 Nagoya.pm #01]●●●でPerl
[2011.09.17 Nagoya.pm #01]●●●でPerl[2011.09.17 Nagoya.pm #01]●●●でPerl
[2011.09.17 Nagoya.pm #01]●●●でPerl真吾 森
 
[LT]UMLとCloudのススメ SP1
[LT]UMLとCloudのススメ SP1[LT]UMLとCloudのススメ SP1
[LT]UMLとCloudのススメ SP1真吾 森
 
いろんなCRuby on windows
いろんなCRuby on windowsいろんなCRuby on windows
いろんなCRuby on windows真吾 森
 
[第38回FLOSS桜山勉強会]貧乏人のための仮想化Tips
[第38回FLOSS桜山勉強会]貧乏人のための仮想化Tips[第38回FLOSS桜山勉強会]貧乏人のための仮想化Tips
[第38回FLOSS桜山勉強会]貧乏人のための仮想化Tips真吾 森
 

Plus de 真吾 森 (6)

Money forwardとりそなVISAデビットの関係を良くしたい
Money forwardとりそなVISAデビットの関係を良くしたいMoney forwardとりそなVISAデビットの関係を良くしたい
Money forwardとりそなVISAデビットの関係を良くしたい
 
最底辺から送る目指せ最底辺の振り返り #-0.5
最底辺から送る目指せ最底辺の振り返り #-0.5最底辺から送る目指せ最底辺の振り返り #-0.5
最底辺から送る目指せ最底辺の振り返り #-0.5
 
[2011.09.17 Nagoya.pm #01]●●●でPerl
[2011.09.17 Nagoya.pm #01]●●●でPerl[2011.09.17 Nagoya.pm #01]●●●でPerl
[2011.09.17 Nagoya.pm #01]●●●でPerl
 
[LT]UMLとCloudのススメ SP1
[LT]UMLとCloudのススメ SP1[LT]UMLとCloudのススメ SP1
[LT]UMLとCloudのススメ SP1
 
いろんなCRuby on windows
いろんなCRuby on windowsいろんなCRuby on windows
いろんなCRuby on windows
 
[第38回FLOSS桜山勉強会]貧乏人のための仮想化Tips
[第38回FLOSS桜山勉強会]貧乏人のための仮想化Tips[第38回FLOSS桜山勉強会]貧乏人のための仮想化Tips
[第38回FLOSS桜山勉強会]貧乏人のための仮想化Tips
 

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