vue+openlayer をベースにマップの集約と散乱効果を実現

vue+openlayer をベースにマップの集約と散乱効果を実現

序文:

Openlayer は、私たちの GIS でよく使用されているオープンソース ソフトウェアであり、非常に良いフィードバックを受けています。以前の ol3 と同様に、大流行しました。マップの実装も非常にシンプルで実用的です。現在、vue で使用されているマップはたくさんあります。では、vue に openlayer を導入して、マップの分散効果、またはさらに深いマップの集約効果を実現したらどうなるでしょうか。この記事では、vue でのマップの実装を共有します。現在、openlayer の5 シリーズと 6.5 はユニバーサルであり、テスト済みで利用可能です。

結果:

1.重合効果:

2. 散布効果:

具体的な実装手順:

1. プロジェクトにOpenLayerを導入する

cnpm i ol --save

2. 構成(必要に応じて導入)

(1)新しいvueファイルを作成する

(2)テンプレート

<div id="マップ"></div>

(3)js部分

関連する設定ファイルをインポートします。これが私のインポートすべてです。状況に応じて削除できます。

"ol/ol.css"をインポートします。
「ol/View」からViewをインポートします。
「ol/Map」からマップをインポートします。
"ol/layer/Tile" から TileLayer をインポートします。
「ol/Overlay」からOverlayをインポートします。
「ol/source/XYZ」からXYZをインポートします。
"ol/source" から { Vector を SourceVec 、Cluster として } インポートします。
"ol"から{Feature}をインポートします。
"ol/layer" から、Vector を LayerVec として、Vector を VectorLayer としてインポートします。
"ol/geom" から { Point, LineString } をインポートします。
 
輸入 {
  スタイル、
  アイコン、
  埋める、
  脳卒中、
  文章、
  CircleStyle として Circle、
} から "ol/style" へ;
 
"ol/source" から { OSM、TileArcGISRest } をインポートします。

3. 地図表示を実現する

マウント:

マウント() {
  このメソッドは、次のとおりです。
},

方法: ここでは 2 つのマップ テンプレートを提供しています。どちらもオンラインです。イントラネットの場合は、独自のアドレスに置き換えてください。

initMap(){
    // マップをレンダリングする varlayers = [
        //濃い青の背景 new TileLayer({
          ソース: 新しいXYZ({
            URL:
            "https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}",
          })、
        })、
        // 背景を初期化 // new TileLayer({
        // ソース: new OSM(),
        // })、
        
      ];
 
      this.map = 新しいマップ({
        レイヤー: レイヤー、
        ターゲット: "マップ"、
        ビュー: 新しいビュー({
          投影: 'EPSG:4326',
          中央: [120, 30],
          ズーム: 10,
          最小ズーム: 5,
          最大ズーム: 14
        })、
      });
      //クリックすると現在の座標が表示されます this.map.on(
        "クリック"、
        関数 (evt) {
          アラート(evt.coordinate[0] + ";" + evt.coordinate[1]);
        },
        地図
      );
}

4. 散水機能

マウント:

マウント() {
  このメソッドは、次のとおりです。
},

方法:

initMap(){
    // マップをレンダリングする varlayers = [
         //濃い青の背景// new TileLayer({
        // ソース: new XYZ({
        // URL:
        // "https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}",
        // })、
        // })、
        //背景を初期化する new TileLayer({
          ソース: 新しい OSM()、
        })、
        
      ];
 
      this.map = 新しいマップ({
        レイヤー: レイヤー、
        ターゲット: "マップ"、
        ビュー: 新しいビュー({
          投影: 'EPSG:4326',
          中央: [120, 30],
          ズーム: 10,
          最小ズーム: 5,
          最大ズーム: 14
        })、
      });
      //クリックすると現在の座標が表示されます this.map.on(
        "クリック"、
        関数 (evt) {
          アラート(evt.coordinate[0] + ";" + evt.coordinate[1]);
        },
        地図
      );
    //ここでは固定データポイントを記述しているので、アドレスをレンダリングした後で this.addMarker() を直接呼び出すことができます。
},
マーカーを追加します(){
    //描画ボードを作成します。let sourceArr = new SourceVec({}); 
    //ランダムデータを定義します。ここでは200個のランダムデータです。for (var i = 1; i <= 200; i++) {
      //ポイントの座標情報 let coordinates = [120.00 + Math.random(), 30.00 + Math.random()];
      feature = new Feature(新しい Point(座標)) とします。
      マーカースタイル = 新しいスタイル({
          画像: 新しいアイコン({
            不透明度: 0.75、
            ソース: this.fixedStationImg1,
        })、
      })
      機能.setStyle(マーカースタイル)
      ソースArr.addFeature(機能);
    }
 
 
     //LayerVec /VectorLayer どちらもOK var layer = new VectorLayer({
          出典: sourceArr、
        })
 
      //マップに描画ボードを追加する this.map.addLayer(
        層
      );  
    
}

5. 集約効果

マウント:

マウント() {
  このメソッドは、次のとおりです。
},

方法:

initMap(){
    // マップをレンダリングする varlayers = [
         //濃い青の背景// new TileLayer({
        // ソース: new XYZ({
        // URL:
        // "https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}",
        // })、
        // })、
        //背景を初期化する new TileLayer({
          ソース: 新しい OSM()、
        })、
        
      ];
 
      this.map = 新しいマップ({
        レイヤー: レイヤー、
        ターゲット: "マップ"、
        ビュー: 新しいビュー({
          投影: 'EPSG:4326',
          中央: [120, 30],
          ズーム: 10,
          最小ズーム: 5,
          最大ズーム: 14
        })、
      });
      //クリックすると現在の座標が表示されます this.map.on(
        "クリック"、
        関数 (evt) {
          アラート(evt.coordinate[0] + ";" + evt.coordinate[1]);
        },
        地図
      );
    //ここでは固定データポイントを記述しているので、アドレスをレンダリングした後で this.addMarker() を直接呼び出すことができます。
},
マーカーを追加します(){
    //描画ボードを作成します。let sourceArr = new SourceVec({}); 
    //ランダムデータを定義します。ここでは200個のランダムデータです。for (var i = 1; i <= 200; i++) {
      //ポイントの座標情報 let coordinates = [120.00 + Math.random(), 30.00 + Math.random()];
      feature = new Feature(新しい Point(座標)) とします。
      markerStyle = new Style({
          画像: 新しいアイコン({
            不透明度: 0.75、
            ソース: this.fixedStationImg1,
        })、
      })
      機能.setStyle(マーカースタイル)
      ソースArr.addFeature(機能);
    }
 
 
      //マップに追加レイヤー - 集約ポイント - LayerVec / VectorLayer どちらもOK var layer = new LayerVec({
          ソース: this.ClusterSource、
          スタイル: 関数 (機能、解像度) {
            var size = feature.get('features').length;
            //集約数が1の場合、つまり最下層が配置アイコンの場合 if (size == 1) {
              新しいスタイルを返す({
                画像: 新しいアイコン({
                  アンカー: [0.5, 1],
                  src: require("../../assets/Img/marker_yes.png"),
                })
              })
            }それ以外 {
              //ここで集計部分のスタイルを設定します return new Style({
                イメージ: 新しい CircleStyle({
                  半径: 30,
                  ストローク: 新しいストローク({
                    色: 「白」
                  })、
                  塗りつぶし: 新しい塗りつぶし({
                    色: '青'
                  })
                })、
                テキスト: 新しいテキスト({
                  テキスト: size.toString(),
                  塗りつぶし: 新しい塗りつぶし({
                    色: 「白」
                  })
                })
              })
            }
          }
        })   
 
      //マップに描画ボードを追加する this.map.addLayer(
        層
      );  
    
}

参考文献:

js で openlayer を使用する: https://blog.csdn.net/HerryDong/article/details/110951955

これで、マップ集約と散乱効果を実現するための vue+openlayer に関するこの記事は終了です。より関連性の高い vue openlayer マップ集約コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • openlayers6 マップオーバーレイの一般的な 3 つの用途 (ポップアップウィンドウマーカーテキスト)
  • Baidu マップ API に基づいて指定されたオーバーレイをクリアする方法
  • Openlayersは地図のフルスクリーン表示を実現
  • vue-openlayers はマップ座標ポップアップボックス効果を実現します
  • openlayers6のマップオーバーレイの詳細な説明

<<:  Docker コンテナ アプリケーションで避けるべき 10 の悪い習慣

>>:  MySql の 4 つのトランザクション分離レベルについて簡単に説明します。

推薦する

画像をMySQLデータベースに保存し、フロントエンドページに表示するための実装コード

目次1. まず、pycharmを使用してDjangoプロジェクトを作成し、関連する環境を設定します。...

Python ベースの Linux システムにおける特定のプロセスのパフォーマンス監視の考え方の詳細な説明

インターネット上には Linux サーバーを監視するためのツール、コンポーネント、プログラムが多数あ...

MySQL で UTF-8 エンコーディングを使用しないのはなぜですか?

MySQL UTF-8 エンコーディングMySQL は 2003 年のバージョン 4.1 から U...

カルーセル効果を書くためのjs

この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...

Linuxのdateコマンドの使用

1. コマンドの紹介date コマンドは、現在の時刻または指定された時刻を指定された形式で表示するた...

Vue-CLI3.xはプロジェクトをサーバーに自動的にデプロイします

目次序文1. scp2をインストールする2. テスト/本番環境サーバーのSSHリモートログインアカウ...

Docker-compose を使用して ELK をデプロイするためのサンプル コード

環境ホストIP 192.168.0.9 Docker バージョン 19.03.2 docker-co...

Dockerを使用してRedisクラスターを構築する方法

目次1. Redis Dockerベースイメージを作成する2. Redisノードイメージを作成する3...

Docker で Zookeeper をインストールする (スタンドアロンおよびクラスター)

Docker を起動したら、利用できるオプションを見てみましょう。 公式のものがある場合は、もちろ...

Portainer を使用した Docker コンテナのデプロイのプロジェクト実践

目次1. 背景2. 操作手順3. Portinerをインストールする3.1 Dockerのデプロイメ...

CSS3 の display:grid、グリッドレイアウトの紹介

1. グリッドレイアウト(グリッド): Web ページをグリッドに分割し、さまざまなグリッドを組み合...

MySQL sql_mode の変更が有効にならない理由と解決策

目次序文シナリオシミュレーション要約する序文最近、sql_mode の話題については何度も話し合われ...

vscode を使用したリモート Linux 開発の実装

過去に別れを告げるvscode にリモート SSH が導入される前は、Linux サーバー開発者の多...

VSCode の Remote-SSH を使用して Linux に接続し、リモート開発を行う

Remote-SSHをインストールして設定するまず VSCode を開き、拡張機能を見つけて、Rem...

Dockerコンテナのログ処理の詳細な説明

Docker には多くのログ プラグインがあります。デフォルトでは json-file を使用します...