Vue で SuperMap を使用する練習

Vue で SuperMap を使用する練習

序文

なんというか、ぼんやりしながら電話に出て、ぼんやりしながら臨時の仕事を受けて、ぼんやりしながら出張に行って、数日間ぼんやりしながらSuperMapを操作しました。SuperMapは本当に強力ですが、機能が比較的強力で、機能ポイントが多すぎて、短期間で開発を開始できないため、習得するにはある程度の時間がかかります。さあ!私も初心者ですが、長い間取り組んできた結果、ハイパーグラフを Vue プロジェクトに導入する方法と手順をここで整理し、ハイパーグラフを使用する必要があるものの、将来の方向性が定まっていない初心者の同僚の役に立ちたいと思っています。参考用であり、信頼できません。

関連資料

使用している人やグループが比較的少ないため、インターネット上の情報も少ないかもしれませんが、それでも共有する必要がある Web サイトがいくつかあります。

スーパーマップ公式サイト:シャトルゲート

SuperGraph ケーススタディ: シャトルゲート

スーパーグラフ 3D: シャトルゲート

OpeaLayers: シャトルゲート

これらのウェブサイトでは、対応する情報やAPIインターフェースを確実に見つけることができますが、公式サイトで示されているケースはすべてjsコードです。vueプロジェクトで使用する必要がある場合は、対応するjsコードをvue構文に変換する必要があります。実際、ケースのコードには具体的な紹介がないため、変換時に各コード行の意味を理解する必要はありません。理解したい場合は、APIを個別にクエリする必要がありますが、これは膨大な作業です。今後ゆっくりと勉強することができます。急いでいる場合は、コードブロックを理解するだけで十分です。

Vue プロジェクトが 2 次元ハイパーグラフを導入

次のステップは、2 次元ハイパーグラフを Vue プロジェクトに導入することです。

OpenLayers のドキュメントを例に挙げてみましょう。

このドキュメントでは、さまざまなインポート方法を紹介しています。Vue プロジェクトの場合は、npm インポート メソッドを使用してください。

npm をインストール @supermap/iclient-ol

インストールが完了すると、node_modules フォルダーに supermap フォルダーが作成されます。おめでとうございます。インストールは成功しました。

ここに画像の説明を挿入

インストールが完了したら、index.html ファイルに CSS ファイルを導入します。

<link href='https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.4.3/css/ol.css' rel='スタイルシート' />

<link href='https://iclient.supermap.io/dist/ol/iclient-ol.min.css' rel='スタイルシート' />

これで、SuperMap がプロジェクトに正常に追加されました。

しかし、プロジェクトの ES6 構文を ES5 に変換できるかどうかという問題があります。これには設定が必要になる可能性があり、そうしないと、後のプロジェクトで Hypergraph を使用してデータをロードするときにエラーが報告されます。

webpack.base.conf.js ファイルにスーパーマップ変換を追加します。

{
   テスト: /\.js$/,
   ローダー: 'babel-loader',
   インクルード: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client'), resolve('node_modules/@supermap')]
},

これは問題ないでしょう。2次元は比較的簡単です。簡単な例を見てみましょう。

ハイパーグラフ 2D ケース

引用

まず、ハイパーグラフを使用する必要があるページでいくつかのライブラリを紹介します。

  'ol/Map' から Map をインポートします。
  'ol/View' から View をインポートします。
  'ol/layer/Tile' から TileLayer をインポートします。
  'ol/control' からコントロールとして * をインポートします。
  '@supermap/iclient-ol' から Logo、TileSuperMapRest をインポートします。

これらのライブラリは、公式 Web サイトのドキュメント、つまり OpenLayers API ドキュメントに従って紹介されています。

具体的にどのようなライブラリを導入するかについては、必要に応じて公式 Web サイトからいくつかの例をコピーし、OpenLayers API ドキュメントの例で使用されている対応するライブラリを確認できます。

例えば公式サイトの場合、 var layer = new ol.layer.Tileに変換するときにどのライブラリを導入すればいいかわからないときは、opealayers を見て確認することができます。

ここに画像の説明を挿入

このチェックに似ています。

html

次に、マップを表示するための HTML を記述します。

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

TS

次に ts コードが来ます。

        var url = "https://iserver.supermap.io/iserver/services/map-world/rest/maps/World";
        this.map = 新しいマップ({
          ターゲット: 'マップ',
          コントロール: control.defaults({ attributionOptions: { collapsed: false } }).extend([new Logo()]),
          ビュー: 新しいビュー({
            中央: [106.86, 39.71],
            // 最大ズーム: 18,
            // 最小ズーム: 2,
            ズーム: 5,
            投影: 'EPSG:4326',
          })
        });
        var レイヤー = 新しい TileLayer({
          ソース: 新しい TileSuperMapRest({
            URL: URL、
            ラップX: 真
          })、
          投影法: 'EPSG:4326'
        });
        レイヤーを追加します。

すると、2次元画像が正常に表示されます。

ここに画像の説明を挿入

他の機能が必要な場合は、公式 Web サイトにアクセスしてケースを確認し、直接使用できますが、js コードを vue 構文に変換する必要があります。

Vue が 3D スーパーグラフを導入

3D は少し難しいので、SuperMap 3D ドキュメントを参照してください。公式サイトでは js を使用しています。vue をインストールするには、時間内にダウンロードできるパッケージが必要です。

パッケージのダウンロード場所

ここに画像の説明を挿入

ダウンロードしたらstaticフォルダに入れます。

ここに画像の説明を挿入

次に、widgets.css、Cesium.js、zlib.min.js ファイルを index.html にインポートします。

<link rel="スタイルシート" href="./static/Cesium/Widgets/widgets.css" rel="外部nofollow" >
<script type="text/javascript" src="./static/Cesium/Cesium.js"></script>
<script type="text/javascript" src="./static/Cesium/Workers/zlib.min.js"></script>

ここに画像の説明を挿入

その後は、何もする必要はありません。SuperMap 3D が必要なインターフェイスに直接書き込むことができます。同様に、テスト用に SuperMap 3D の公式 Web サイトで提供されている 3D ケースを参照することもできます。js コードを vue コードに変換する必要があります。

ここでは、レイヤーを導入するデモをいくつか簡単に紹介します。マップを表示するには、div が必要です。この div の幅と高さを設定することを忘れないでください。そうしないと、表示されない場合があります。覚えておいてください。

<div id="map" style="幅: 100%;高さ: 95%"></div>

次に ts コードです。2 次元のライブラリのようにさまざまなライブラリを導入する必要はなく、直接コードを記述するだけです。

3次元の地球儀を簡単に作成

var ビューア = 新しい Cesium.Viewer('map')

このコード行で3次元の地球儀を表示できれば導入は成功しており問題はないということなので、このまま開発を進めていけます。

ここに画像の説明を挿入

その後、詳細なコードは共有しません。必要な場合は、ケースから変換を見つけてください。

いくつかの一般的なレイヤーを導入する方法を皆さんと共有したいと思います。実際、公式 Web サイトでもそれについて説明しています。私はそれらすべてをテストしたので、直接お見せします。

最初の方法は地形図と画像をインポートすることです

例えば、北京のある場所のGIS情報をインポートしたい場合、Baiduでは平面地図しか見えません。平面地図は2次元なので高さは見えません。しかし、HyperMapが地形図を導入すると、高さなどの地形情報を見ることができます。このとき、あるエリアの地形へのリンクと、このエリアの画像へのリンクが必要です。すると、地形は下にあり、高さがあり、その上に画像地図が敷かれています。これで理解できたと思いますか?コードは次のとおりです。

地形図を追加

var ビューア = 新しい Cesium.Viewer('map', {
    //地形サービスプロバイダーのインスタンスを作成します。URL は SuperMap iServer によって公開された TIN 地形サービスです。terrainProvider: new Cesium.CesiumTerrainProvider({
    url: 'http://localhost:8090/iserver/services/3D-DiXing/rest/realspace/datas/面积_Terrain', // データの下のリンクである地形マップをロードします isSct: true, // 地形サービスは SuperMap iServer から提供されるため、公開時に isSct を true に設定する必要があります
    不可視性: 真
  })、
});

画像を追加する

// 基になる画像を追加 var layer = new Cesium.SuperMapImageryProvider({
    url: 'http://localhost:8090/iserver/services/YingXiang/rest/maps/Image base map' //REST 形式のイメージ サービス アドレス});
var imgLayer = this.viewer.imageryLayers.addImageryProvider(レイヤー)

このようにして、地形と画像が読み込まれます。

次に、カメラの位置、つまり、ロード時に表示される部分を特定できます。そうでない場合は、地球儀が表示され、ズームインして自分で見つける必要があります。

//カメラの視野角を定義するだけです this.scene.camera.setView({
  宛先: Cesium.Cartesian3.fromDegrees(108.19, 40.39, 1000000)
});

次に最初のマップをロードします。

S3Mレイヤーの読み込み

ここでは、このファイル ディレクトリ内のすべての S3M レイヤーがロードされます。必要に応じて、一部のみをロードすることもできます。公式ドキュメントを参照してください。

// 川の S3M レイヤーを追加します。Open は、ファイル パスの下にあるすべてのレイヤー情報をマップにインポートします。var promise = this.scene.open("http://localhost:8090/iserver/services/CJ/rest/CJ");
Cesium.when.all([promise], 関数(レイヤー) {
  let layer = that.scene.layers.find('Yangtze River') // 名前でレイヤーをクエリします。この名前はレイヤー接続に対応する名前であり、自分で付けた名前ではありません。layer.style3D.bottomAltitude = 1150 // マップ上のレイヤーの高さを設定します。必要に応じて設定します。this.viewer.zoomTo(layer); // レイヤーはモデルの位置に配置されます })

公式説明:

ここに画像の説明を挿入

MVT レイヤーの追加

// 草MVTレイヤーを追加 this.mc = {
  url: 'http://localhost:8090/iserver/services/CAODI/rest/maps/CD', //MVT サービス アドレス canvasWidth: 512,
  name: 'Grassland', // レイヤーの名前は、自分の名前ではなく、この接続ビューアに対応するレイヤーの名前です: that.viewer
}
this.McMvtMap = this.scene.addVectorTilesMap(this.mc);

上記のコードにより、MVT レイヤーの追加が完了します。

そして削除がある

this.scene.removeVectorTilesMap(McMvtMap.name);

以上です。あと 1 行コードがあるので、追加した方が良いでしょう。

this.scene.globe.depthTestAgainstTerrain = false;

これで、Vue での SuperMap の使用実践に関するこの記事は終了です。Vue での SuperMap の使用に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • VueはOpenLayersを使用してTiandi MapとAmapを読み込み
  • VueはBaidu Mapsを使用して都市の位置特定を実現
  • VueはAmapを使用して都市の位置特定を実現
  • フロントエンドVueでAmapを使用する方法
  • Vue で Baidu Maps を使用してカスタム オーバーレイ (水の波紋) を追加する方法
  • vue-amapは地図を表示し、住所をマークします
  • vue-openlayers はマップ座標ポップアップボックス効果を実現します
  • Vue を使用して maptalks マップを導入し、集約効果を実現する

<<:  HTML5で見逃せないAPIやヒントのまとめ

>>:  CSS 動的読み込みバー効果のサンプルコード

推薦する

Linux xargsコマンドの使用

1. 機能: xargs は、stdin 内のスペースまたは改行で区切られたデータをスペースで区切ら...

Navicat for SQLite で中国語データを CSV にインポートする方法

この記事では、参考までに、csv中国語データをNavicat for SQLiteにインポートする具...

Vue ページ印刷で自動ページングを実装する 2 つの方法

この記事では、ページ印刷の自動ページングを実現するためのVueの具体的なコードを例として紹介します。...

Vue が scss (mixin) をグローバルに導入

目次1. ミックスイン.scss 2. 単一ファイルの使用3. グローバルマウント3.1 依存関係の...

awk でのループの使用

同じコマンドを複数回実行するさまざまな種類のループについて学習しましょう。 awk スクリプトには、...

Nginx はリクエスト接続を統合し、ウェブサイトのアクセス例を高速化します

序文世界最高の Web サーバーの 1 つである Nginx の利点は明らかです。 Nginx がリ...

MySQL マルチテーブル結合入門チュートリアル

接続は、実際の外部キー(人工的に作成された 2 つのテーブル間の対応関係を指します。対照的に、FOR...

MySQL データベース開発の 36 の原則 (要約)

序文これらの原則は実際の戦闘から要約されています。あらゆる原則の背後には血なまぐさい教訓があるこれら...

Linux インデックスノード inode の詳細な説明

1. inodeの紹介inode を理解するには、まずファイル ストレージから始める必要があります。...

docker compose を使用して FastDfs ファイル サーバーをインストールする詳細な例

ドッカーの作成 バージョン: '2' サービス: fastdfsトラッカー: ホスト...

MySQL truncate table ステートメントの使用

Truncate table ステートメントは、テーブル内のすべてのデータを削除/切り捨てるために使...

JavaScript が重複したネットワークリクエストを防ぐ方法の例

序文開発中は、インターフェース要求の繰り返しによってさまざまな問題が発生することがよくあります。ネッ...

CSS を使用してサブ要素に応じて異なるスタイルを記述する方法

達成すべき効果: 必要なもの1枚、2枚、3枚とスタイルが異なります。子要素の判定はjsで完結できます...

JavaScript 正規表現の説明

目次1. 正規表現の作成2. 使用モード2.1 シンプルモードの使用2.2 特殊文字の使用3. 応用...

Linux での stat 関数と stat コマンドの使用法の詳細な説明

stat 関数と stat コマンドLinux ファイル内の [inode = インデックス ノード...