Upgrade to Pro — share decks privately, control downloads, hide ads and more …

複数ピンをまとめて表示するYahoo!地図用のJavaScriptライブラリをつくりま作りました

Avatar for Hori Godai Hori Godai
August 24, 2019

 複数ピンをまとめて表示するYahoo!地図用のJavaScriptライブラリをつくりま作りました

Avatar for Hori Godai

Hori Godai

August 24, 2019
Tweet

More Decks by Hori Godai

Other Decks in Programming

Transcript

  1. 各サービスの利用制限 1 日 50,000pv と Google と比べると 50 倍以上利用が可能 サービス

    無料PV 数 API キー取得 クレジットカード番号 Yahoo! Map 50,000 pv/ 日 必須 必要無し Google Map 28,000 pv/ 月 必須 登録必須 OpenStreetMap -- 未設定 必要無し
  2. 使い方 JavaScript の読み込み <script src="https://map.yahooapis.jp/js/V1/jsapi?appid=[YahooMap のAPI キー]"></script> <script src="https://map.yahooapis.jp/js/V1/jsapi?appid=[YahooMap のAPI

    キー]"></script> <script src="https://unpkg.com/yahoo-map-cluster@latest/bundle/ymap-cluster.js"></script> <script src="https://unpkg.com/yahoo-map-cluster@latest/bundle/ymap-cluster.js"></script>
  3. 使い方 JavaScript の記述 var var ymap ymap = = new

    new Y Y. .Map Map( ("map" "map") ); ; ymap ymap. .drawMap drawMap( (new new Y Y. .LatLng LatLng( (35.66572 35.66572, , 139.73100 139.73100) ), , 15 15, , Y Y. .LayerSetId LayerSetId. .NORMAL NORMAL) ); ; var var marker marker = = new new Y Y. .Marker Marker( (new new Y Y. .LatLng LatLng( (35.66572 35.66572, , 139.73100 139.73100) )) ); ; var var marker2 marker2 = = new new Y Y. .Marker Marker( (new new Y Y. .LatLng LatLng( (35.66572 35.66572, , 139.73000 139.73000) )) ); ; var var marker3 marker3 = = new new Y Y. .Marker Marker( (new new Y Y. .LatLng LatLng( (35.665 35.665, , 139.734 139.734) )) ); ; var var marker4 marker4 = = new new Y Y. .Marker Marker( (new new Y Y. .LatLng LatLng( (35.6635 35.6635, , 139.734 139.734) )) ); ; var var marker5 marker5 = = new new Y Y. .Marker Marker( (new new Y Y. .LatLng LatLng( (35.665 35.665, , 139.731 139.731) )) ); ; var var marker6 marker6 = = new new Y Y. .Marker Marker( (new new Y Y. .LatLng LatLng( (35.6642 35.6642, , 139.733 139.733) )) ); ; var var marker7 marker7 = = new new Y Y. .Marker Marker( (new new Y Y. .LatLng LatLng( (35.6635 35.6635, , 139.7328 139.7328) )) ); ; var var marker8 marker8 = = new new Y Y. .Marker Marker( (new new Y Y. .LatLng LatLng( (35.665 35.665, , 139.7343 139.7343) )) ); ; var var marker9 marker9 = = new new Y Y. .Marker Marker( (new new Y Y. .LatLng LatLng( (35.6638 35.6638, , 139.7333 139.7333) )) ); ; var var marker10 marker10 = = new new Y Y. .Marker Marker( (new new Y Y. .LatLng LatLng( (35.6628 35.6628, , 139.7333 139.7333) )) ); ; new new YmapCluster YmapCluster( (ymap ymap, , [ [marker marker, , marker2 marker2, , marker3 marker3, , marker4 marker4, , marker5 marker5, , marker6 marker6, , marker7 marker7, , marker8 marker8, , marker9 marker9, , marker10 marker10] ]) ); ;
  4. 使い方 オプションの紹介 Yahoo! Map Cluster にはその他いくつかのオプションが用意されています。 オプション名 デフォルト値 説明 gridSize

    60(px) クラスターの半径。この半径に含まれるピンが 同じクラスターにカテゴライズされます。 minClusterSize 2 クラスターの中のpin の最小の数。ピンが集まっ ていてもこの数以下だとクラスタリングされな い。 imagePath ./images/cluster/ クラスター画像に使用するアセットのパス injectStyle .ymap-cluster-label, .ymap-cluster-icon などクラ スターに関するクラスに対してスタイルを記述 するための関数 getClusterSize クラスターの中のピン数に応じてクラスターの 色を変更するための関数
  5. アルゴリズムの解説 近くのクラスターの検索方法 ただの2 点間の距離ではなく地球が丸いことを考慮 2 点間のlat, lng から距離を算出(km ) R

    は地球の半径 6731km a a = = sin² sin²( (Δφ Δφ/ /2 2) ) + + cos φ cos φ1 1 * * cos φ cos φ2 2 * * sin² sin²( (Δλ Δλ/ /2 2) ) c c = = 2 2 * * atan2 atan2( ( √a √a, , √ √( (1 1−a −a) ) ) ) d d = = R R * * c c