Coder Social home page Coder Social logo

coffeeeeel / webgislab Goto Github PK

View Code? Open in Web Editor NEW

This project forked from minorua/webgislab

0.0 2.0 0.0 2.16 MB

An OpenLayers application

Home Page: http://minorua.github.io/WebGISLab/index.html

License: MIT License

HTML 0.59% JavaScript 99.10% CSS 0.30% Shell 0.01%

webgislab's Introduction

Welcome to WebGIS Lab

OpenLayersを利用したWebGISアプリケーションの開発。試行錯誤の中でちょっとしたものが生まれればいい。

Released Web Maps

  • 飛び出せ ニッポン! (Beta): http://minorua.github.io/maps/japan3d.html

    地理院タイルの「標準地図」「色別標高図」「写真」レイヤの表示が可能で、クリック1つで3D表示にすることができます. 簡単な操作で3DモデルをSTLファイルに保存することができ、3Dプリンタを用いて地形をパソコンの外へ出力することができます.

Screenshots

minorua#1

Demo Projects

備えたい機能・特徴

  • プロジェクト
    • 読み込み
      • 保存されたプロジェクトをメニューから開く
      • 初期プロジェクトの指定 (URLパラメータまたはscriptタグ)
    • 保存
      • ファイル
      • IndexedDB
    • 新規プロジェクトの作成と既存プロジェクトの変更
      • タイトル・説明
      • 座標参照系
        • カスタム座標参照系
      • プラグイン
  • レイヤリスト
    • チェックボックスによる表示・非表示切り替え
    • レイヤ順の並べ替え
    • 透過性の調整と混合モード切り替え
    • レイヤ領域へズーム
    • 属性テーブル
    • プロパティ
    • レイヤの削除
  • レイヤプロパティダイアログ
    • プロパティの変更
      • タイトル
      • ベクトルレイヤのスタイル
  • 属性テーブル
    • 地物の検索
    • 地物へのズーム
  • ラスタタイル(ベース地図)の追加
    • 地理院タイル
      • サーバに無駄なリクエストを送らないように領域とズームレベル範囲をレイヤ(ソース)に指定する
      • 各レイヤに関する情報
    • WMTSレイヤ
    • OpenStreetMap
  • Natural Earthデータレイヤの追加
    • 小スケールデータの一部
    • デフォルトプロジェクトで利用する
  • 地理院標高タイルの利用
    • 段彩図、傾斜区分図レイヤの追加
      • 凡例
    • 地形断面図作成
      • キャンバス上の色で着色
  • 地物情報の表示
    • 対象の選択: すべての表示レイヤ/選択レイヤのみ
  • 帰属
    • 表示を重複させない
  • 印刷
    • 印刷用ページ
  • 地図検索 (Nominatim)
    • 検索結果へのジャンプ
    • 5件程度の結果を一覧表示する
  • ローカルのファイル(KML, GeoJSON形式)の読み込み
    • ドラッグ&ドロップで
    • レイヤ追加ダイアログから
  • ローカルの写真ファイルの読み込み
    • ドラック&ドロップで
    • 場所情報の取得し地図上にマーカまたはサムネイルを配置する
    • ポップアップ表示
    • IndexedDBに保存 (保管目的ではない)
  • GistやGitHubにアップロードされたファイルの読み込み
    • クロスオリジンアクセスが可能 (CORS)
    • KML, GeoJSON形式
    • レイヤ追加ダイアログから追加
    • Gist
    • GitHub
  • 読み込まれたファイルレイヤの保存
    • ファイル保存
    • IndexedDB
  • プロジェクトの発行(アーカイブ)
    • 発行可能な構成でHTMLファイルとプロジェクトファイル、ライブラリファイルをアーカイブ
  • 3Dビューア (three.js)
    • 3Dビューア
    • Z誇張度の変更
    • 回転ボタン
    • STLファイル保存ボタン
      • 地図画像も保存
  • Cesiumの起動
    • Cesiumの起動
    • ストレージデータの共有
  • 距離・面積の計測ツール
    • 距離の計測
      • Vincentyの式
    • 面積の計測
  • ウェブ地図リンク
    • 外部サイトへのリンク
  • タッチデバイス対応
  • 軽量なコアアプリケーションと機能追加の容易性
    • モジュール、プラグイン管理

試験的な機能

  • ベクトルタイル
    • 国土地理院のベクトルタイルレイヤの追加
    • スタイル設定
      • 用意された外部スタイルファイル(関数)の適用
  • ネットワーク接続のない環境での利用
    • IndexedDBを用いたタイル画像データのキャッシュ
    • ServiceWorkerを用いたファイルのキャッシュ
    • 動作確認
      • Android
      • iOS

Design for Project File

プロジェクトファイル

olapp.loadProject(new olapp.Project({
  title: 'New Project',
  description: '',
  view: new ol.View({
    projection: 'EPSG:3857',
    center: ol.proj.transform([138.7, 35.4], 'EPSG:4326', 'EPSG:3857'),
    maxZoom: 18,
    zoom: 5
  }),
  plugins: ['source/gsitiles.js'],
  layers: [    // from bottom to top
    {source: 'GSITiles', layer: 'std'},
    {source: 'GSITiles', layer: 'ort', options: {visible: false}}
  ]
}));

プロジェクトの保存

  • プロジェクトの文字列化 (Project.toString())

プロジェクトに対する変更の保存

  • レイヤ構成
  • スタイル設定
  • 読み込まれたファイルのデータ
olapp.loadProject(new olapp.Project({
  title: 'New Project',
  description: '',
  view: new ol.View({
    projection: 'EPSG:3857',
    center: ol.proj.transform([138.7, 35.4], 'EPSG:4326', 'EPSG:3857'),
    maxZoom: 18,
    zoom: 5
  }),
  plugins: ['source/gsitiles.js'],
  init: function (project) {  // project is this project
    // some initialization code
  },
  layers: [    // from bottom to top
    {source: 'GSITiles', layer: 'std', options: {visible: true, opacity: 1, blendMode: 'source-over'}},
    {source: 'GSITiles', layer: 'relief', options: {visible: true, opacity: 0.8, blendMode: 'multiply'}},
    {source: 'JSON', layer: 'filename.geojson#20151123010100', options: {visible: true, opacity: 1, blendMode: 'source-over'}},
    {source: 'Text', layer: 'filename.kml#20151123020100', options: {visible: true, opacity: 1, blendMode: 'source-over'}},
    {source: 'Custom', layer: 'customlayer1', options: {visible: true, opacity: 1, blendMode: 'source-over'}}
  ],
  styles: [    // same item count as layers
    undefined,
    function (feature, resolution) {
      return myfunction1(feature.getGeometry().getType());
    },
    function (feature, resolution) {
      return myfunction2(feature.getGeometry().getType());
    },
    undefined
  ],
  customLayers: {
    'customlayer1': function (project, layerOptions) {  // project is this project
      var options = {....};
      return new ol.layer.VectorTile($.extend(options, layerOptions));
    }
  },
  sources: {
    'filename.geojson#20151123010100': {format: 'geojson', data: {........GeoJSON Content........}},
    'filename.kml#20151123020100': {format: 'kml', data: "<?xml version=\"1.0\" encoding=\"utf-8\" ?>........KML Content......."}
  }
}));

プロジェクトの読み込み

  • 読み込み方法
    • メニューから
      • 用意されたプロジェクト一覧
      • ストレージに保存されたプロジェクト一覧
    • URLパラメータ
      • index.html?project=project_name
      • 安全のためにfilesフォルダ以下のプロジェクトファイルに限定
    • HTMLファイルのScriptタグ
    • プロジェクトファイルのドラッグ&ドロップ

Design for Module/Plugin Management

  • 周辺的な機能のモジュールは使用する時にロードする
  • プラグインで用途に合わせたカスタマイズ
  • モジュールの例
    • 3Dビューア
    • ウィンドウへドロップされたファイルの種類に応じた読み込み処理
  • プラグインの例
    • データソースの追加

プラグインのコード

(function () {
  var myplugin = {
    name: 'my plugin',
    description: '...'
  };

  myplugin.init = function () {
    return olapp.core.loadScripts(['js/olapp/module1.js', 'js/olapp/module2.js'], true);   // pass true as 2nd parameter to load scripts one by one
  };

  ...

  olapp.plugin.register('path_to_plugin', myplugin);
})();

テスト

http://minorua.github.io/WebGISLab/test.html

webgislab's People

Contributors

minorua avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.