見出し画像

[Vue.js]大量の位置座標マーカーを高速表示できるようにしたい!ー地図上にマーカーを表示するー

下記記事で環境構築~地図表示までを記載しています。

今回は地図上にマーカーを表示します。
leaflet単体なら特別な手順は必要なく、数行のコードを追加するのみですが、vue2leafletでは少々ややこしかったので、方法をまとめます。


生成AIのコード例

まず、Bing Chatの出力したコード例を見てみましょう。

<template>
  <div id="map">
    <l-map :zoom="13" :center="[35.6895, 139.6917]">
      <l-tile-layer url="http://{s}.tile.osm.org/{z}/{x}/{y}.png"></l-tile-layer>
      <l-marker :lat-lng="[35.6895, 139.6917]"></l-marker>
    </l-map>
  </div>
</template>

<script>
import { LMap, LTileLayer, LMarker } from 'vue2-leaflet';
import 'leaflet/dist/leaflet.css';

export default {
  components: {
    LMap,
    LTileLayer,
    LMarker
  },
}
</script>

<style scoped>
#map {
  height: 400px;
  width: 100%;
}
</style>

前回作成した「Leaflet_Map.vue」に、l-marker要素が追加されています(5行目)。l-marker要素のlat-lng属性に、マーカーを表示したい位置座標を入力します。
一目は違和感のないコードで、vue2-leafletライブラリからコンポーネントをインポートし、それを適切に使用できているようですが、上記コードでプロジェクトを実行すると、下記のように表示されます。

マーカーが表示されるはずの場所に枠線とテキストが表示されている…

問題点と解消法

いろいろ調査した結果、vue2leafletのGitHubで上記問題がイシューとしてまとめられており、解消法も同時に記載されていました。

上記を参考に修正したコードが下記になります。

<template>
  <div id="map">
    <l-map :zoom="13" :center="[35.6895, 139.6917]">
      <l-tile-layer url="http://{s}.tile.osm.org/{z}/{x}/{y}.png"></l-tile-layer>
      <l-marker :lat-lng="[35.6586, 139.7454]">
        <l-icon
          :icon-url="markerImg"
          :shadow-url="markerShadowImg"
        />      
      </l-marker>
    </l-map>
  </div>
</template>

<script>
import { LMap, LTileLayer, LMarker, LIcon } from 'vue2-leaflet';
import 'leaflet/dist/leaflet.css';
import markerImg from 'leaflet/dist/images/marker-icon.png';
import markerShadowImg from 'leaflet/dist/images/marker-shadow.png';

export default {
  components: {
    LMap,
    LTileLayer,
    LMarker,
    LIcon  
  },
  data(){
    return {
      markerImg : markerImg,
      markerShadowImg : markerShadowImg
    }
  },  
}
</script>

<style scoped>
#map {
  height: 400px;
  width: 100%;
}
</style>

上記を実行すると、指定した位置にマーカーが表示されます。

マーカー表示に成功!

イシューに記載されたコードを読む限りでは、マーカー画像がうまく読み込めていないのが原因のようで、修正コードでは、マーカー画像を読み込む部分を明示的に描くようにしています。


次回は大量のマーカーを表示してみます。表示パフォーマンスの検証もやる予定です。

この記事が参加している募集

スキしてみて

この記事が気に入ったらサポートをしてみませんか?