2018年11月30日金曜日

ol5.3ex 1 - Simple Map

「Simple Map (simple.html) 」を参考に地図を表示してみます。説明に次のようにあります。

A simple map with an OSM source.

OSM ソースを使用したシンプル(単純な)マップ。

次の内容で index.js と index.html を作成します。(テストで使ったファイルの内容と同じです。)
user@deb9-vmw:~/new-project$ vim index.js
import 'ol/ol.css';
import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import OSM from 'ol/source/OSM';
const map = new Map({
/** const[JavaScript]
 * Constants are block-scoped, much like variables defined 
 * using the let statement. The value of a constant cannot 
 * change through reassignment, and it can't be redeclared.
 * 定数(const)はブロックスコープで、let ステートメントを
 * 使用して定義された変数にとても似ています。定数の値は、再
 * 代入による変更はできず、再宣言されません。
 * (MDN[https://developer.mozilla.org/en-US/docs/Web/
 * JavaScript/Reference/Statements/const])
 */
/** Map[ol/Map]
 * The map is the core component of OpenLayers. For a map 
 * to render, a view, one or more layers, and a target 
 * container are needed:
 * map(マップ)は、OpenLayers のコアコンポーネントです。
 * map を描画するために、view(ビュー)と1つ以上の layers
 * (レイヤ)と target(ターゲット)コンテナが必要です:
 * (ol5 API)
 */
 target: 'map',
 /** target[new Map(options)]
  * The container for the map, either the element itself 
  * or the id of the element. If not specified at 
  * construction time, module:ol/Map~Map#setTarget must 
  * be called for the map to be rendered.
  * map のコンテナ、(HTML)エレメント自身、またはエレメント
  * の id。構築時に指定されていない場合、描画される map のた
  * めにモジュール:ol/Map~Map#setTarget が呼び出されなけれ
  * ばなりません。
  * (ol5 API)
  */
 layers: [
 /** layers[new Map(options)]
  * Layers. If this is not defined, a map with no layers 
  * will be rendered. Note that layers are rendered in 
  * the order supplied, so if you want, for example, a 
  * vector layer to appear on top of a tile layer, it 
  * must come after the tile layer.
  * layers(レイヤ)。これが定義されていない場合、layers のな
  * い map が描画されます。layers は提供される順番で描画され、
  * もし、例えば、タイルレイヤの上部にベクタレイヤを表示したい
  * なら、タイルレイヤの後に来なければなりません。
  * (ol5 API)
  */
  new TileLayer({
   source: new OSM()
  })
 ],
 view: new View({
 /** view[new Map(options)]
  * The map's view. No layer sources will be fetched unless
  * this is specified at construction time or through 
  * module:ol/Map~Map#setView.
  * map(マップ)の view(ビュー)。これが構築時に指定されてい
  * ないか、モジュール:ol/Map~Map#setView を通じてなければ、
  * 取るレイヤソースはありません。
  * (ol5 API)
  */
 /** View(ol/View)
  * A View object represents a simple 2D view of the map.
  * This is the object to act upon to change the center, 
  * resolution, and rotation of the map.
  * View(ビュー)オブジェクトは、map(マップ)の 単純な 2D 
  * view を表示します。
  * これは、map の center(中心)、resolution(解像度)、
  * rotation (回転)を変換を実行するためのオブジェクトです。
  * (ol5 API)
  */
  center: [0, 0],
  /** center[new View(opt_options)]
   * The initial center for the view. The coordinate system 
   * for the center is specified with the projection option. 
   * Layer sources will not be fetched if this is not set, 
   * but the center can be set later with #setCenter.
   * view(ビュー)の初期 center(中心)値。 center の座標系
   * は、projection(投影法)オプションで指定されます。これが
   * 設定されなければレイヤソースは取得されませんが、center は 
   * #setCenter で後で設定できます。
   * (ol5 API)
   */
  zoom: 2
  /** zoom[new View(opt_options)]
   * Only used if resolution is not defined. Zoom level used 
   * to calculate the initial resolution for the view. The 
   * initial resolution is determined using the 
   * #constrainResolution method.
   * resolution(解像度)が定義されていない場合のみ使用されま
   * す。view の初期 resolution(解像度)を計算するために使用
   * される zoom(ズーム)レベル。初期 resolution は、
   * #constrainResolution メソッドを使用して決定されます。
   * (ol5 API)
   */
 })
});

user@deb9-vmw:~/new-project$ vim index.html
<!doctype html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Simple Map</title>
  <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
  <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
 </head>
 <body>
  <div id="map"></div>
  <script src="./index.js"></script>
 <body>
</html>
npm start を実行します。
user@deb9-vmw:~/new-project$ npm start
> new-project@1.0.0 start /home/user/ol5-examples01

> parcel index.html

Server running at http://localhost:1234

✨  Built in 16.23s.

Webブラウザのアドレス欄に

http://localhost:1234

と入力して Enter キーを押します。


ol5.3ex 0 - Examples のテストの準備
examples 用のディレクトリを作成し、そこに移動します。

user@deb9-vmw:~$ mkdir ol5-examples01 &&  cd ol5-examples01

このプロジェクトを初期化し、問い合わせに回答します。

user@deb9-vmw:~/ol5-examples01$  npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install ` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (ol5-examples01)
version: (1.0.0)
description: ol5 examples test
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /home/user/ol5-examples01/package.json:

{
  "name": "ol5-examples01",
  "version": "1.0.0",
  "description": "ol5 examples test",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes) yes

OpenLayers をインストールします。

user@deb9-vmw:~/ol5-examples01$ npm install ol
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN ol5-examples01@1.0.0 No repository field.

+ ol@5.3.0
added 8 packages from 6 contributors and audited 8 packages in 4.063s
found 0 vulnerabilities

開発環境としてビルドツールの parcel をインストールします。

user@deb9-vmw:~/ol5-examples01$ npm install --save-dev parcel-bundler
npm WARN deprecated browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.

> deasync@0.1.13 install /home/user/ol5-examples01/node_modules/deasync
> node ./build.js

`linux-x64-node-8` exists; testing
Binary is fine; exiting

> parcel-bundler@1.10.3 postinstall /home/user/ol5-examples01/node_modules/parcel-bundler
> node -e "console.log('\u001b[35m\u001b[1mLove Parcel? You can now donate to our open collective:\u001b[22m\u001b[39m\n > \u001b[34mhttps://opencollective.com/parcel/donate\u001b[0m')"

Love Parcel? You can now donate to our open collective:
 > https://opencollective.com/parcel/donate
npm WARN ol5-examples01@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ parcel-bundler@1.10.3
added 735 packages from 575 contributors and audited 7635 packages in 42.851s
found 0 vulnerabilities

テストのために、次の内容で index.js と index.html を作成します。

user@deb9-vmw:~/new-project$ vim index.js
import 'ol/ol.css';
import {Map, View} from 'ol';
import TileLayer from 'ol/layer/Tile';
import OSM from 'ol/source/OSM';

const map = new Map({
 target: 'map',
 layers: [
  new TileLayer({
   source: new OSM()
  })
 ],
 view: new View({
  center: [0, 0],
  zoom: 0
 })
});

user@deb9-vmw:~/new-project$ vim index.html
<!doctype html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Using Parcel with OpenLayers</title>
  <style>
   #map {
    width: 400px;
    height: 250px;
   }
  </style>
 </head>
 <body>
  <div id="map"></div>
  <script src="./index.js"></script>
 <body>
</html>
package.json の script セクションに次のように追加します。

user@deb9-vmw:~/public_html/new-project$ vim package.json
{
  "name": "browserify_demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "parcel index.html",
    "build": "parcel build --public-url . index.html"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "ol": "^5.1.3"
  },
    "parcel-bundler": "^1.9.7"
  }
}
npm start を実行します。

user@deb9-vmw:~/new-project$ npm start
> new-project@1.0.0 start /home/user/ol5-examples01

> parcel index.html


Server running at http://localhost:1234

✨  Built in 16.23s.

Webブラウザのアドレス欄に

http://localhost/:1234

と入力して Enter キーを押します。


v5.3.0 がリリースされました

v5.3.0 がリリースされました
日本時間で(2018.11.7)に v5.3.0 がリリースされました。

Releases 5.3.0 - openlayers/openlayers GitHub
(https://github.com/openlayers/openlayers/releases/tag/v5.3.0)より

We're continuing to work toward more complete type checking with TypeScript – based on JSDoc annotations in the source. The 5.3 release includes a number of bug fixes related to the type checking effort. In addition the release comes with a handful of new features and improved API reference docs.

ソース内の JSDoc annotations を基本とした - TypeScript を使用してより完全なタイプチェックに向かって作業しています。5.3 リリースは、2、3のタイプチェック効果に関係したバグフィックスを含みます。加えて、リリースは少しの新しい機能と向上した API リファレンスドキュメントを備えています。


Upgrade Notes

The getUid function returns string
getUid ファンクションは文字列を返します

The getUid function from the ol/util module now returns a string instead of a number.

ol/util モジュールからの getUid ファンクションは、現在、数字のかわりに文字列を返します。


Attributions are not collapsible for ol/source/OSM
Attributions は ol/source/OSM に対して折りたたみできません

When a map contains a layer from a ol/source/OSM source, the ol/control/Attribution control will be shown with the collapsible: false behavior.

map は ol/source/OSM ソースのレイヤを含むとき、ol/control/Attribution コントロールは collapsible: false 動作で表示されます。

To get the previous behavior, configure the ol/control/Attribution control with collapsible: true.

以前の動作を求めるためには、ol/control/Attribution コントロールをcollapsible: true に設定します。

(New Features and Fixes は、リストを参照して下さい。)