Maplat Advent Calendar 6日目は、Maplat Coreでマーカーを静的に表示する方法です。
今日の動くものはここで確認できます。 => CodeSandBox Maplat Advent Calendar day 6
今日の実装は特にボタンなどいらないので、4日目のコードをベースに改造しましょう。
まず、POIを定義するファイルを外出しで準備しましょう。
{
"main": {
"pois": [
{
"id": "castle",
"lat": 36.243881,
"lng": 139.543517,
"name": "館林城"
}
]
}
}
これの意味ですが、main
というIDのレイヤーの配下に、POI-IDがcastle
、緯度経度36.243881,139.543517
、POI名が館林城
のPOI1つが配置されることになります。
レイヤーIDのmain
は第1POIレイヤーのデフォルトであり、複数レイヤーを使わない場合は以下のように省略することもできます。
[
{
"id": "castle",
"lat": 36.243881,
"lng": 139.543517,
"name": "館林城"
}
]
いずれにせよ上記のようにpois/poi.json
を設置した後に、アプリ設定ファイルを以下のように書き換えます。
{
"home_position": [139.5321, 36.249302],
"default_zoom": 17,
"start_from": "tatebayashi_ojozu",
"sources": [
{
"mapID": "tatebayashi_ojozu",
"setting_file": "https://s.maplat.jp/r/tatebayashimap/maps/tatebayashi_ojozu.json"
},
"osm"
],
"pois": "pois/pois.json"
}
変更箇所はpois
で外部POI定義ファイルを指定しているところですが、このPOI定義、外部定義ファイルにしなくとも、アプリ設定ファイルの中で直接定義することも可能です。
{
"home_position": [139.5321, 36.249302],
"default_zoom": 17,
"start_from": "tatebayashi_ojozu",
"sources": [
{
"mapID": "tatebayashi_ojozu",
"setting_file": "https://s.maplat.jp/r/tatebayashimap/maps/tatebayashi_ojozu.json"
},
"osm"
],
"pois": {
"main": {
"pois": [
{
"id": "castle",
"lat": 36.243881,
"lng": 139.543517,
"name": "館林城"
}
]
}
}
}
どちらでも動作するので、どちらでも問題ありません。
これらの設定でPOIピンは表示されるのですが、どうせならPOIピンをクリックした際のイベント取得なども加えてみましょう。
app.js
をこんな感じにします。
import "@maplat/core/dist/maplat_core.css";
import { MaplatApp } from "@maplat/core";
var option = {
appid: "maplat_ac_day6"
};
var app = new MaplatApp(option);
app.waitReady.then(function() {
app.addEventListener('clickMarker', function(evt) {
app.selectMarker(evt.detail.namespace_id);
console.log(evt.detail);
});
app.addEventListener('clickMap', function (evt) {
app.unselectMarker();
console.log(evt.detail);
});
});
app
にclickMarker
のイベントリスナーを加えて、その中でapp.selectMarker
を使い、クリックされたPOIピンを選択状態(ピン画像が選択状態画像になり、ピンが地図中心に移動する)にしています。
さらにクリックされたPOIの情報もconsole.log
で表示しています。
これだけではクリックされたピンは選択状態から戻れないので、app
にclickMap
のイベントリスナーを加えて、POI以外の地図面がクリックされた際には、app.unselectMarker
を使い、全てのPOIの選択状態をクリアしています。
さらに、クリックされた地図上の場所情報もconsole.log
で表示しています。
これを実行してみると、こんな感じになります。
明日は、POIを動的に追加する方法について記事に書きます。