<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://www.svgmap.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>svg2wiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://www.svgmap.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Admin"/>
	<updated>2026-05-14T13:12:19Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;diff=2427</id>
		<title>メインページ</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;diff=2427"/>
		<updated>2026-04-22T01:37:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* SVGMap wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://svgmap.org/ SVGMmap.orgホームページ]&lt;br /&gt;
=SVGMap wiki=&lt;br /&gt;
*[[解説書|SVGMap.js(Level0.1 Framework) API解説書]]&lt;br /&gt;
**[[内部機構解説]]&lt;br /&gt;
* DeepWikiによって生成されたソフトウェア解説書&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgmapjs svgmapjs] : SVGMapの中核となるsvgmap.jsフレームワーク&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgmapAppLayers svgmapAppLayers] : svgmap.jsにプラグインされる、各種レイヤーのLaWAアプリ&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgMapDemo svgMapDemo] : svgmapjsとsvgmapAppLayersを活用した公式デモ&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgMapTools svgMapTools] : svgmapjsに最適化された静的レイヤーを生成するJamstackパターンのバックエンドツール&lt;br /&gt;
** [https://deepwiki.com/svgmap/redisSvgMap redisSvgMap] : 同、動的配信Webサービス&lt;br /&gt;
&lt;br /&gt;
*チュートリアル&lt;br /&gt;
**[https://svgmap.org/movie/ 初歩 解説動画]&lt;br /&gt;
**[https://github.com/svgmap/svgMapTools/tree/master/tutorials SVGMapTools利用者向け チュートリアル]&amp;lt;br&amp;gt; CSVやShapefileから地図システムをプログラミングレスで構築する&lt;br /&gt;
**[https://svgmap.github.io/tutorials/ 開発者向けチュートリアルページ] &amp;lt;br&amp;gt; SVGMap.jsのAPIを使い、カスタマイズされた地図システムを構築 (ただしサーバサイドは基本的に静的(Jamstack))&lt;br /&gt;
**[[チュートリアル|開発者向け チュートリアル]](to be retired)&lt;br /&gt;
*[https://github.com/svgmap GitHub]&lt;br /&gt;
** [https://github.com/svgmap/svgmapjs svgmapjs]&amp;lt;br&amp;gt;ウェブブラウザ上で動作するSVGMapコンテンツビューア(フロントエンド, webApps)&lt;br /&gt;
** [https://github.com/svgmap/svgmapAppLayers svgmapAppLayers]&amp;lt;br&amp;gt;SVGMap.jsで利用できる各種レイヤー([[リンク集#.E3.82.B9.E3.83.A9.E3.82.A4.E3.83.89.E5.8B.95.E7.94.BB|Layers as Web Apps]])のライブラリ&lt;br /&gt;
** [https://github.com/svgmap/svgMapTools SVGMapTools]&amp;lt;br&amp;gt;shapeflieやcsvから、SVGMapコンテンツを生成するジェネレータソフト(バックエンド)&lt;br /&gt;
*[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.1/ SVG Map Level 0.1 dev test directory]&lt;br /&gt;
*[[リンク集]]&lt;br /&gt;
* [https://svgmap.org/ ホームページ]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2426</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2426"/>
		<updated>2026-04-17T05:13:59Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* S-LaWA (Strict/Sandbox LaWA / 分離モード) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Layers as Web Apps）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
=====T-LaWA (Tight-coupled LaWA / 従来の密結合モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
=====S-LaWA (Strict/Sandbox LaWA / 分離モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* 代わりに直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
* レイヤーSVGファイル内に直接記述された &amp;lt;script&amp;gt; 要素は無効化されます。&lt;br /&gt;
&lt;br /&gt;
======【発展機能：S-LaWA Level 2 (CORS非依存モード)】======&lt;br /&gt;
* S-LaWAのサブモードとして、配信元の外部サーバーにCORS（Cross-Origin Resource Sharing）設定がされていないSVGレイヤーであっても、安全に読み込んで統合できる仕組みです。&lt;br /&gt;
* コンテナ側の &amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素に &amp;lt;code&amp;gt;data-controller&amp;lt;/code&amp;gt; 属性が指定されている場合、SVGMapフレームワークはCORSエラーを回避することが可能です。実際のSVG及びhtmlの取得と展開は全てサンドボックス内のS-LaWAで行われ、サーバー側の設定に依存しないクロスオリジン連携を実現します。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2425</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2425"/>
		<updated>2026-04-17T05:09:51Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* S-LaWA (Strict/Sandbox LaWA / 分離モード) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Layers as Web Apps）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
=====T-LaWA (Tight-coupled LaWA / 従来の密結合モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
=====S-LaWA (Strict/Sandbox LaWA / 分離モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* 代わりに直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
* レイヤーSVGファイル内に直接記述された &amp;lt;script&amp;gt; 要素は除去され無効化されます。&lt;br /&gt;
&lt;br /&gt;
======【発展機能：S-LaWA Level 2 (CORS非依存モード)】======&lt;br /&gt;
* S-LaWAのサブモードとして、配信元の外部サーバーにCORS（Cross-Origin Resource Sharing）設定がされていないSVGレイヤーであっても、安全に読み込んで統合できる仕組みです。&lt;br /&gt;
* コンテナ側の &amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素に &amp;lt;code&amp;gt;data-controller&amp;lt;/code&amp;gt; 属性が指定されている場合、SVGMapフレームワークはCORSエラーを回避することが可能です。実際のSVG及びhtmlの取得と展開は全てサンドボックス内のS-LaWAで行われ、サーバー側の設定に依存しないクロスオリジン連携を実現します。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2424</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2424"/>
		<updated>2026-04-16T08:43:12Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 【発展機能：S-LaWA Level 2 (CORS非依存モード)】 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Layers as Web Apps）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
=====T-LaWA (Tight-coupled LaWA / 従来の密結合モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
=====S-LaWA (Strict/Sandbox LaWA / 分離モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* 代わりに直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
======【発展機能：S-LaWA Level 2 (CORS非依存モード)】======&lt;br /&gt;
* S-LaWAのサブモードとして、配信元の外部サーバーにCORS（Cross-Origin Resource Sharing）設定がされていないSVGレイヤーであっても、安全に読み込んで統合できる仕組みです。&lt;br /&gt;
* コンテナ側の &amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素に &amp;lt;code&amp;gt;data-controller&amp;lt;/code&amp;gt; 属性が指定されている場合、SVGMapフレームワークはCORSエラーを回避することが可能です。実際のSVG及びhtmlの取得と展開は全てサンドボックス内のS-LaWAで行われ、サーバー側の設定に依存しないクロスオリジン連携を実現します。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2423</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2423"/>
		<updated>2026-04-16T08:42:41Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 【発展機能：S-LaWA Level 2 (CORS非依存モード)】 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Layers as Web Apps）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
=====T-LaWA (Tight-coupled LaWA / 従来の密結合モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
=====S-LaWA (Strict/Sandbox LaWA / 分離モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* 代わりに直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
======【発展機能：S-LaWA Level 2 (CORS非依存モード)】======&lt;br /&gt;
* S-LaWAのサブモードとして、配信元の外部サーバーにCORS（Cross-Origin Resource Sharing）設定がされていないSVGレイヤーであっても、安全に読み込んで統合できる仕組みです。&lt;br /&gt;
* コンテナ側の &amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素に &amp;lt;code&amp;gt;data-controller&amp;lt;/code&amp;gt; 属性が指定されている場合、SVGMapフレームワークはCORSエラーを回避することが可能です。実際のSVG及びhtmlの取得と展開はサンドボックス内のS-LaWAが代理で行われ、サーバー側の設定に依存しないクロスオリジン連携を実現します。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2422</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2422"/>
		<updated>2026-04-16T08:41:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* '【発展機能：S-LaWA Level 2 (CORS非依存モード)】 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Layers as Web Apps）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
=====T-LaWA (Tight-coupled LaWA / 従来の密結合モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
=====S-LaWA (Strict/Sandbox LaWA / 分離モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* 代わりに直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
======【発展機能：S-LaWA Level 2 (CORS非依存モード)】======&lt;br /&gt;
* S-LaWAのサブモードとして、配信元の外部サーバーにCORS（Cross-Origin Resource Sharing）設定がされていないSVGレイヤーであっても、安全に読み込んで統合できる仕組みです。&lt;br /&gt;
* コンテナ側の &amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素に &amp;lt;code&amp;gt;data-controller&amp;lt;/code&amp;gt; 属性が指定されている場合、SVGMapフレームワークはCORSエラーを回避することが可能です。実際のSVGの取得と展開はサンドボックス内のS-LaWAが代理で行われ、サーバー側の設定に依存しないクロスオリジン連携を実現します。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2421</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2421"/>
		<updated>2026-04-16T08:40:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Layers as Web Apps）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
=====T-LaWA (Tight-coupled LaWA / 従来の密結合モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
=====S-LaWA (Strict/Sandbox LaWA / 分離モード)=====&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* 代わりに直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
======'【発展機能：S-LaWA Level 2 (CORS非依存モード)】======&lt;br /&gt;
* S-LaWAのサブモードとして、配信元の外部サーバーにCORS（Cross-Origin Resource Sharing）設定がされていないSVGレイヤーであっても、安全に読み込んで統合できる仕組みです。&lt;br /&gt;
* コンテナ側の &amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素に &amp;lt;code&amp;gt;data-controller&amp;lt;/code&amp;gt; 属性が指定されている場合、SVGMapフレームワークはCORSエラーを回避することが可能です。実際のSVGの取得と展開はサンドボックス内のS-LaWAが代理で行われ、サーバー側の設定に依存しないクロスオリジン連携を実現します。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2420</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2420"/>
		<updated>2026-04-16T08:36:52Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 動作モードの指定 (data-lawa-mode) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Layers as Web Apps）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* 代わりに直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2419</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2419"/>
		<updated>2026-04-16T08:36:14Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Layers as Web Apps）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* 代わりに直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2418</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2418"/>
		<updated>2026-04-16T08:35:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Layers as Web Apps）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* セキュリティの代償として、直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2417</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2417"/>
		<updated>2026-04-16T08:32:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Layers as Web Apps）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に完全準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* セキュリティの代償として、直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2416</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2416"/>
		<updated>2026-04-16T08:29:45Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Localized active Web App）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に完全準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。 (2026/4/16現在 dev2リリース段階)&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* セキュリティの代償として、直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2415</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2415"/>
		<updated>2026-04-16T08:28:53Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 拡張API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Localized active Web App）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に完全準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* セキュリティの代償として、直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
'''【注意】S-LaWA（サンドボックス化LaWA）環境においては、セキュリティ上の理由から親フレームワークのオブジェクトに直接アクセスできません。代わりに &amp;lt;code&amp;gt;svgMapSandboxLayerLib.js&amp;lt;/code&amp;gt; が提供する「モック（代替）オブジェクト」を介して非同期に操作が行われます。各項目の「S-LaWAでの仕様」を参照してください。'''&lt;br /&gt;
&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' すべてのイベントがサポートされています。親フレームワークで発生したイベントは、メッセージングを通じてS-LaWA内のwindowオブジェクトに中継・ディスパッチされます。&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親フレームワークから非同期で同期された静的なコピーデータとして提供されます。&amp;lt;code&amp;gt;.hash&amp;lt;/code&amp;gt; プロパティへの書き込みはS-LaWAでもサポートされており、裏側で自動的に親へ同期されます。ただし、&amp;lt;code&amp;gt;.script&amp;lt;/code&amp;gt; による親の実行コンテキストへのアクセスはできません。&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' S-LaWA環境内に展開された「ローカルXML DOM」が提供されます。このドキュメント（要素の追加・削除・属性変更・テキスト変更など）を操作して &amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; を呼び出すと、フレームワークの共通地図キャンバスに送信され更新します。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 親のインスタンスの代わりに、S-LaWA用のモッククラス（&amp;lt;code&amp;gt;SandboxSvgMap&amp;lt;/code&amp;gt;）が提供されます。以下のメソッドのみが利用可能です。&lt;br /&gt;
* &amp;lt;code&amp;gt;refreshScreen()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getGeoViewBox()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getSvgImageProps()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setShowPoiProperty()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;showModal()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;getCORSURL()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setCORSproxy()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parseEscapedCsvLine()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layerID=====&lt;br /&gt;
&lt;br /&gt;
svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
&lt;br /&gt;
[[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 制限なく利用可能です。&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''現在のところ利用不可です。'''&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 参照できません。S-LaWAは自身のURLコンテキストで動作するため、自身の &amp;lt;code&amp;gt;location.href&amp;lt;/code&amp;gt; などを参照してください。&lt;br /&gt;
&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' 現在のところ利用不可です。&lt;br /&gt;
&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' '''利用可能です。''' S-LaWA内で &amp;lt;code&amp;gt;window.preRenderFunction&amp;lt;/code&amp;gt; を定義しておくと、&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; が呼ばれた際や、親からズーム・パンなどのイベントを受信した際に、S-LaWA内でローカルに実行されます。この関数内でローカルDOMを変更することで、描画前の状態更新をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
'''【S-LaWAでの仕様】''' &amp;lt;code&amp;gt;customHitTester&amp;lt;/code&amp;gt; 自体は利用できません。（なお&amp;lt;code&amp;gt;svgMap.setShowPoiProperty(func)&amp;lt;/code&amp;gt;は利用可能です。）&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2414</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2414"/>
		<updated>2026-04-16T08:14:08Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Localized active Web App）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年のアップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に完全準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* セキュリティの代償として、直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2413</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2413"/>
		<updated>2026-04-16T08:13:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* レイヤー固有ユーザインターフェース */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。&lt;br /&gt;
&lt;br /&gt;
詳細は[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Localized active Web App）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年の特大アップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に完全準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* セキュリティの代償として、直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2412</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2412"/>
		<updated>2026-04-16T08:11:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* updateLayerListUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Localized active Web App）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年の特大アップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に完全準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* セキュリティの代償として、直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2411</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2411"/>
		<updated>2026-04-16T08:10:51Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 第一章：SVGMapの基本機構と、更新部分 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]におけるimage, animation要素の扱い&lt;br /&gt;
** [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Localized active Web App）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年の特大アップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に完全準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* セキュリティの代償として、直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2410</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2410"/>
		<updated>2026-04-16T08:10:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 動作モードの指定 (data-lawa-mode) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Localized active Web App）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年の特大アップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に完全準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* セキュリティの代償として、直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2409</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2409"/>
		<updated>2026-04-16T08:08:31Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 詳細 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LaWAとS-LaWA（サンドボックス化LaWA）のアーキテクチャ====&lt;br /&gt;
SVGMapにおけるレイヤー固有UI（LaWA: Localized active Web App）には、セキュリティと用途に応じた2つの動作モードが存在します。2026年の特大アップデートにより、Web標準のセキュリティモデル（クロスオリジン制約）に完全準拠した'''S-LaWA（サンドボックス化LaWA）'''が導入されました。&lt;br /&gt;
&lt;br /&gt;
'''T-LaWA (Tight-coupled LaWA / 従来の密結合モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークと同じオリジン（ドメイン）で動作する、従来型のレイヤーWebAppです。&lt;br /&gt;
* iframeのJavaScriptコンテキストに、親フレームワークから直接APIオブジェクトが注入されます。&lt;br /&gt;
* 全ての[[#拡張API]]にアクセスでき、複雑なDOM操作や関数渡しが可能ですが、サードパーティ製のレイヤーを読み込む際にはセキュリティ上のリスク（XSS等）を伴います。&lt;br /&gt;
&lt;br /&gt;
'''S-LaWA (Strict/Sandbox LaWA / 分離モード)'''&lt;br /&gt;
* 親のSVGMapフレームワークとは異なるオリジンで動作することを前提とした、セキュアなレイヤーWebAppです。&lt;br /&gt;
* iframeは完全に隔離（サンドボックス化）され、親フレームワークとの通信は全て非同期メッセージング（postMessage）を介して行われます。&lt;br /&gt;
* 悪意のあるスクリプトから親フレームワークを保護できるため、外部のサードパーティ製レイヤーを安全に統合できます。&lt;br /&gt;
* セキュリティの代償として、直接的なオブジェクト参照や関数の受け渡しが禁止されるため、[[#拡張API]]の利用に強い制限がかかります（前節の「S-LaWAでの制限」を参照）。&lt;br /&gt;
&lt;br /&gt;
===== 動作モードの指定 (data-lawa-mode) =====&lt;br /&gt;
レイヤーがどちらのモードで起動するかは、ルートコンテナ内でそのレイヤーを参照している '''&amp;lt;code&amp;gt;animation&amp;lt;/code&amp;gt; 要素の &amp;lt;code&amp;gt;xlink:href&amp;lt;/code&amp;gt; の値（URLのオリジン）'''、もしくは同要素に付与する '''&amp;lt;code&amp;gt;data-lawa-mode&amp;lt;/code&amp;gt;''' 属性で制御できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; (未指定時のデフォルト): レイヤー（コントローラ）のURLが親フレームワークと同一オリジンであれば '''T-LaWA''' として、クロスオリジンであれば自動的に '''S-LaWA''' として起動します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;isolated&amp;quot;&amp;lt;/code&amp;gt;: 同一オリジンであっても、強制的に '''S-LaWA''' として完全に隔離して起動します（開発時のテスト等に有用です）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;tight&amp;quot;&amp;lt;/code&amp;gt;: 強制的に '''T-LaWA''' として起動を試みます。（※クロスオリジン環境でこれを指定した場合は、適切なCORS設定やプロキシサーバーの利用が必須となります）&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
&lt;br /&gt;
レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeの性質と利用できるAPIは、前述の動作モード（T-LaWAかS-LaWAか）によって大きく異なります。&lt;br /&gt;
&lt;br /&gt;
どのような環境・モードで起動された場合でも、レイヤー固有UI内でSVGMapの各種リソースへ安全にアクセスするためには、レイヤーのHTML内で提供される初期化ライブラリ（&amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; 等）を読み込む必要があります。&lt;br /&gt;
&lt;br /&gt;
'''【重要】''' 各種APIへのアクセスが可能になるのは、iframe自体の &amp;quot;load&amp;quot; イベントではなく、SVGMapフレームワークとの接続が完了した後に発行される '''&amp;lt;code&amp;gt;layerWebAppReady&amp;lt;/code&amp;gt;''' イベント以降です。&lt;br /&gt;
* 初期化処理は以下のように記述することを強く推奨します。&lt;br /&gt;
* &amp;lt;code&amp;gt;window.addEventListener(&amp;quot;layerWebAppReady&amp;quot;, function(){ /* 初期化処理 */ });&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。デフォルト（&amp;lt;code&amp;gt;data-lawa-mode=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt;）では、これは自動的にセキュアなS-LaWAとして起動するため、特別なCORS設定は不要です。ただし前述の通りAPIには制限がかかります。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
&lt;br /&gt;
data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。（※この機能は主にT-LaWAでの利用を想定しています）&lt;br /&gt;
&lt;br /&gt;
data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます（※モードによる制限あり）。&lt;br /&gt;
&lt;br /&gt;
data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
* #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
* #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2408</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2408"/>
		<updated>2026-04-16T07:48:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* イベント */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*layerWebAppReady : 初期化が完了しLaWAの実行が可能になった (LaWAでは、loadイベントではなくlayerWebAppReadyを使用することを強く推奨します)&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB5&amp;diff=2407</id>
		<title>チュートリアル5</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB5&amp;diff=2407"/>
		<updated>2026-03-21T02:08:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* dynamicOSM_r11.js */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= チュートリアル5 WebApp Layer タイルピラミッド =&lt;br /&gt;
SVGMap.jsでは、レイヤーは単なるコンテンツ(SVGのファイル)だけでなく、javascriptによって動的にSVGMapコンテンツを生成するWebAppを与えることができます。（[[解説書#.E3.82.A6.E3.82.A7.E3.83.96.E3.82.A2.E3.83.97.E3.83.AA.E3.82.B1.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AB.E3.82.88.E3.82.8B.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.81.A8.E3.80.81.E3.81.9D.E3.81.AE.E3.83.8F.E3.82.A4.E3.83.91.E3.83.BC.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.AA.E3.83.B3.E3.82.B0|WebAppによる動的なレイヤー (WebApp Layer)]]）の（[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]）&lt;br /&gt;
&lt;br /&gt;
WebApp Layerの名の通り、レイヤーに紐付けられるのはjavascriptコードだけでなく、HTML+CSSなどによるUI(Windowオブジェクト)も持ちます。&lt;br /&gt;
&lt;br /&gt;
チュートリアル５以降は、主にこのWebApp Layer機能を使って様々なデータを表示したり、レイヤーに固有のユーザインターフェースを設ける機能を実装します。&lt;br /&gt;
&lt;br /&gt;
ここではこの機能を使って、OpenStreetMapのタイルピラミッドを用いて、伸縮スクロールに応じて適切な地図をスピーディに表示するレイヤーを構築してみます。&lt;br /&gt;
&lt;br /&gt;
なお、チュートリアル５は少々コード量が多いので、短いコードでWebApp Layerの機能を試すには[[チュートリアル6]]の方が簡単かもしれません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 実際の動作は、[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial5/tutorial5.html こちら]をクリック。&lt;br /&gt;
* 使用ファイルの[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial5.zip ZIPアーカイブファイル]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== tutorial5.html ==&lt;br /&gt;
*SVGMapのコアプログラムファイル(SVGMapLv0.1_r18module.js)を読み込み、SVGMapの各種APIを利用可能にする。&lt;br /&gt;
*地図表示部分を(DIVで)定義し、そこに表示するレイヤをまとめたSVGファイル(Containers.svg)を読み込む(上記SVGMapのコアプログラムにて自動的にVisibleになっているレイヤが表示される)。&lt;br /&gt;
*ズームアップ・ズームダウン・GPSの各ボタンの表示とクリック時の動作(SVGMapのコアプログラムのそれぞれのAPIを呼び出す)を定義。&lt;br /&gt;
**ズームアップボタン:svgMap.zoomup() APIを呼び出すことで地図をズームアップする。&lt;br /&gt;
**ズームダウンボタン:svgMap.zoomdown() APIを呼び出すことで地図をズームダウンする。&lt;br /&gt;
**GPSボタン:svgMap.gps() APIを呼び出すことで、現在地(PCやスマートフォンの位置、特定できる場合のみ)を中心にズームアップ表示する。&lt;br /&gt;
*中心を表す十字マークを表示。&lt;br /&gt;
*上記十字マークが示している地図上の緯度・経度の表示(実際には、地図の移動時に地図の中心の緯度・経度を表示する)。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;SVGMapLevel0.1-Rev14-Draft Tutorial5 DynamicContents&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;!-- viewport 知表示領域を画面全体とする定義 --&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SVGMapのコアAPIの読み込み --&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body bgcolor=&amp;quot;#ffffff&amp;quot; style=&amp;quot;overflow:hidden;&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;!-- 地図SVGファイルを複数含む(このチュートリアルでは5ファイルのみ)コンテナファイル(Container.svg)の読み込み --&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;gui&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- ズームアップボタン --&amp;gt;&lt;br /&gt;
  &amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;./img/zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;!-- ズームダウンボタン --&amp;gt;&lt;br /&gt;
  &amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;./img/zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;!-- GPSボタン --&amp;gt;&lt;br /&gt;
  &amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;./img/gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;!-- 画面右上に表示するタイトル --&amp;gt;&lt;br /&gt;
  &amp;lt;font color=&amp;quot;blue&amp;quot; style=&amp;quot;right: 5px; top: 5px; position: absolute;&amp;quot; &amp;gt;SVGMapLevel0.1 Rev14 Draft : Tutorial5 DynamicContents&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;!-- 画面右下に表示する --&amp;gt;&lt;br /&gt;
  &amp;lt;font color=&amp;quot;blue&amp;quot; style=&amp;quot;right: 5px; bottom: 5px; position: absolute;&amp;quot; size=&amp;quot;-2&amp;quot; &amp;gt;by SVGMap tech.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;!-- 中央に表示される十字マーク --&amp;gt;&lt;br /&gt;
  &amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;./img/Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;!-- 画面左下に表示される十字マークの緯度・経度(タイトル) --&amp;gt;&lt;br /&gt;
  &amp;lt;font id=&amp;quot;posCmt&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 5px; bottom: 5px; position: absolute;&amp;quot;&amp;gt;Lat,Lng:&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;!-- 画面左下に表示される十字マークの緯度・経度(実際の値の初期表示) --&amp;gt;&lt;br /&gt;
  &amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;lat , lng&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Container.svg ==&lt;br /&gt;
*表示する各レイヤ用のSVGファイルを読み込む(dynamicOSM_r10.svgのみを読み込んでいる)。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot; xmlns:go=&amp;quot;http://purl.org/svgmap/profile&amp;quot; viewBox=&amp;quot;12300 -4600 2200 2200&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;matrix(100.0,0.0,0.0,-100.0,0.0,0.0)&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- OpenStreetMap用SVGファイルを表示状態として読み込む --&amp;gt;&lt;br /&gt;
&amp;lt;animation x=&amp;quot;-30000&amp;quot; y=&amp;quot;-30000&amp;quot; width=&amp;quot;60000&amp;quot; height=&amp;quot;60000&amp;quot; xlink:href=&amp;quot;dynamicOSM_r11.svg&amp;quot; title=&amp;quot;OpenStreetMap(Global)&amp;quot; class=&amp;quot;basemap switch&amp;quot; visibility=&amp;quot;visible&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== dynamicOSM_r11.svg ==&lt;br /&gt;
外部のOpenStreetMapを表示するためのWebAppが紐付けられたSVG Mapコンテンツレイヤーファイル。&lt;br /&gt;
&lt;br /&gt;
SVGMap.jsの持つ[[解説書#.E3.82.A6.E3.82.A7.E3.83.96.E3.82.A2.E3.83.97.E3.83.AA.E3.82.B1.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AB.E3.82.88.E3.82.8B.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.81.A8.E3.80.81.E3.81.9D.E3.81.AE.E3.83.8F.E3.82.A4.E3.83.91.E3.83.BC.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.AA.E3.83.B3.E3.82.B0|WebApp Layer機構]]を活用します。&lt;br /&gt;
&lt;br /&gt;
* SVGコンテンツのドキュメント要素(svg要素)のdata-controller属性でウェブアプリケーション(javascriptコードが載ったhtmlコンテンツ)を参照することで、SVGMapコンテンツのレイヤーにウェブアプリを紐づけます。&lt;br /&gt;
** #exec=hiddenOnLayerLoad ハッシュは、同ウェブアプリケーションを非表示状態で起動させます。[[解説書#レイヤー固有のUI]]の詳細を参照&lt;br /&gt;
* ウェブアプリでDOMを直接生成するので、コンテンツの中身はほとんど空になっています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot; viewBox=&amp;quot;-42.8202042942663, -49.9999999999999, 513.842451531196, 600&amp;quot; data-controller=&amp;quot;dynamicOSM_r11.html#exec=hiddenOnLayerLoad&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;matrix(100,0,0,-100,0,0)&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== dynamicOSM_r11.html、dynamicOSM_r11.js ==&lt;br /&gt;
&lt;br /&gt;
dynamicOSM_r11.svgに紐付けられたwebApp([[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]])です。レイヤーに紐付けられたwebAppでは、[[解説書#.E6.8B.A1.E5.BC.B5API|独自のAPI]]が利用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.openstreetmap.org/ OpenStreetMap(OSM)]は縮尺に応じたピラミッド状の256×256ピクセルのタイルに分割された、[https://satakagi.github.io/mapsForWebWS2020-docs/imgs/tile_pyramid.png ピラミッド状のイメージ]を配信しています。([https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames OSM Slippy map tilenames], [https://wiki.openstreetmap.org/wiki/Zoom_levels OSM ZoomLevels])&lt;br /&gt;
&lt;br /&gt;
これを使用して、表示範囲とズームレベルに適したタイルをOpenStreetMapのサーバから動的に取得・表示する機能([https://en.wikipedia.org/wiki/Level_of_detail_(computer_graphics) Level of Detail])を実装します。&lt;br /&gt;
&lt;br /&gt;
''Note: ここで使用しているOpenStreetMapのタイルはいわゆるウェブメルカトル図法上での均等メッシュタイルとなっています。一方、このチュートリアルで使用しているSVGMapコンテンツは[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 正距方位図法](Plate Caree：経度緯度をそのままX,Y平面に展開した図法、業務や技術系の分野でよく使われる)を用いています。そのため図法変換が必要になりますが、本チュートリアルでは簡単化のためにタイルの1次変換だけで済ませています。日本列島レベルぐらいの小縮尺では少し図法の違いによるずれが見えるかもしれません。（SVGMap.jsでは[[解説書#.E3.83.A1.E3.83.AB.E3.82.AB.E3.83.88.E3.83.AB.E5.9B.B3.E6.B3.95.E3.82.92.E5.90.AB.E3.82.80.E4.BB.BB.E6.84.8F.E3.81.AE.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E3.81.9D.E3.81.AE.E5.90.88.E6.88.90.E6.A9.9F.E8.83.BD.28.EF.BC.9Erev16.29|より正確な図法変換にも対応]]しています。）''&lt;br /&gt;
&lt;br /&gt;
=== dynamicOSM_r11.html ===&lt;br /&gt;
htmlは、[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI.E3.81.AE.E3.81.9F.E3.82.81.E3.81.AEhtml.E6.96.87.E6.9B.B8.28webApp.29.E3.81.AE.E6.A7.8B.E9.80.A0.E3.83.BB.E4.BD.9C.E6.B3.95|レイヤー固有のUIの初期化処理のための共通ライブラリ(svgMapLayerLib.js)の読み込み]]と、このレイヤー固有の処理内容を記述したscriptコード部(&amp;lt;code&amp;gt;dynamicOSM_r11.js&amp;lt;/code&amp;gt;)、及びUI(html,css等)から構成されます。&lt;br /&gt;
&lt;br /&gt;
dynamicOSM_r11.html&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&amp;lt;!doctype html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;OpenStreerMap Dynamic Layer&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;dynamicOSM_r11.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;OpenStreerMap Dynamic Layer&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== dynamicOSM_r11.js ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;onload&amp;lt;/code&amp;gt; 通常のwebAppと同様、このhtmlに関係するリソースの読み込み完了後実行される関数&lt;br /&gt;
**&amp;lt;code&amp;gt;svgMap&amp;lt;/code&amp;gt; [[解説書#svgMap|コアフレームワークインスタンス]]&lt;br /&gt;
***&amp;lt;code&amp;gt;svgMap.refreshScreen()&amp;lt;/code&amp;gt; 伸縮スクロール以外のタイミングでDOMの再描画が必要な場合、[[解説書#refreshScreen|再描画を明示]]する必要があります。&lt;br /&gt;
**** [[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]&lt;br /&gt;
*&amp;lt;code&amp;gt;preRenderFunction()&amp;lt;/code&amp;gt; この関数を定義すると、[[解説書#preRenderFunction|画面の再描画の度に、その直前にこの関数が実行されます。]]&lt;br /&gt;
**&amp;lt;code&amp;gt;svgImagesProps&amp;lt;/code&amp;gt; [[解説書#svgImageProps|webAppに紐づいたSVGコンテンツの各種情報]]&lt;br /&gt;
***[[解説書#svgImageProps|解説書参照]] , [[解説書#.E3.83.97.E3.83.AD.E3.83.91.E3.83.86.E3.82.A3.E3.83.AA.E3.82.B9.E3.83.88|参照2]]&lt;br /&gt;
***&amp;lt;code&amp;gt;svgImageProps.scale&amp;lt;/code&amp;gt; SVGコンテンツの座標系の画面の座標系に対するスケール (注：地理座標系とは異なる)　（[[解説書#.E3.83.97.E3.83.AD.E3.83.91.E3.83.86.E3.82.A3.E3.83.AA.E3.82.B9.E3.83.88|参考情報]]）&lt;br /&gt;
**&amp;lt;code&amp;gt;svgMap.getGeoViewBox()&amp;lt;/code&amp;gt; [[解説書#getGeoViewBox|表示領域を地理座標で取得]]&lt;br /&gt;
**&amp;lt;code&amp;gt;getTileSet&amp;lt;/code&amp;gt;表示すべきタイルのリスト(連想配列)を取得(詳細後述)&lt;br /&gt;
**&amp;lt;code&amp;gt;svgImage&amp;lt;/code&amp;gt; [[解説書#svgImage|紐付けられたSVGMapコンテンツのDOM]]&lt;br /&gt;
***OSMのタイルはsvgのimage要素としてsvg DOMに配置されます。また、getTileSetで得た各タイルのタイル番号(連想配列のKey)をmetadata属性に設定しています。&lt;br /&gt;
***スクロール後、この関数(preRenderFunction)が再度呼び出された時、前ステップまでに既に描画済みのタイルのうち、スクロール後も描画すべきタイルはそのまま残しておくための処理をこのmetadataの値をもとに行います。&lt;br /&gt;
**&amp;lt;code&amp;gt;getTile&amp;lt;/code&amp;gt;タイルリストの連想配列の情報(ZoomLevel,X,Y)をもとに、新たに取得すべきタイルのためのimage要素を得る&lt;br /&gt;
***OSMのビットイメージタイルはsvgのimage要素として貼り付けられます。&lt;br /&gt;
***&amp;lt;code&amp;gt;getURL&amp;lt;/code&amp;gt; ZoomLevel,X,Yから、実際のOSMのタイルのURLを生成する関数&lt;br /&gt;
***&amp;lt;code&amp;gt;XY2latLng&amp;lt;/code&amp;gt;ZoomLevel,X,Yから、タイルの地理座標の領域を得る関数&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;getTileSet&amp;lt;/code&amp;gt; 現在のズームレベルと表示領域において、表示すべきタイルをリストアップする関数&lt;br /&gt;
**OSM Slippy Map Tileの、[https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Zoom_levels Zoom]及び[https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#X_and_Y XY番号]を求め、それをキーにした連想配列を返却します。&lt;br /&gt;
**OSM Slippy Map Tileは、[https://en.wikipedia.org/wiki/Mercator_projection#Web_Mercator ウェブメルカトル]図法上で再帰的に２ｘ２等分したタイルピラミッドになっています。&lt;br /&gt;
***ウェブメルカトル図法は、(経度±180度、緯度±85.05113度）の範囲を正方形の地図として構築します。&lt;br /&gt;
**&amp;lt;code&amp;gt;latLng2XY&amp;lt;/code&amp;gt; ウェブメルカトル図法上の、指定したZoomLevelにおいて、地球全図を一枚の大きな正方形のビットイメージと想定したときの、指定した緯度経度のぞのビットイメージ上での座標値を求める&lt;br /&gt;
***&amp;lt;code&amp;gt;lvl2Res&amp;lt;/code&amp;gt; ZoomLevelから対応する地球全体のビットイメージの幅を求める(Level0:256px)&lt;br /&gt;
**&amp;lt;code&amp;gt;XY2TileXY&amp;lt;/code&amp;gt; 上記地球全図の一枚の大きな正方形のビットイメージ上のXY座標から、それをタイル分割したときに、その座標が属するタイルの番号（タイルのX番号、Y番号）を得る&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dynamicOSM_r11.js&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
// Dynamic OpemStreetMap Layer for SVGMap Sample for SVGMapLevel0 &amp;gt; r10&lt;br /&gt;
//&lt;br /&gt;
// Programmed by Satoru Takagi&lt;br /&gt;
// &lt;br /&gt;
// License: (MPL v2)&lt;br /&gt;
// This Source Code Form is subject to the terms of the Mozilla Public&lt;br /&gt;
// License, v. 2.0. If a copy of the MPL was not distributed with this&lt;br /&gt;
// file, You can obtain one at https://mozilla.org/MPL/2.0/.&lt;br /&gt;
// iframe化を想定した動的レイヤーのプロトタイプ&lt;br /&gt;
// (JavaScriptをインポートSVGコンテンツに置くことができる。)&lt;br /&gt;
// 地図データとしては、OpenStreetMapを利用（比較的容易に他にも置き換えられる）&lt;br /&gt;
//&lt;br /&gt;
//&lt;br /&gt;
// このコードの動作環境では、以下があらかじめ設定される&lt;br /&gt;
// document:このドキュメント自身&lt;br /&gt;
// svgImage:このドキュメントに紐づいたSVGMapコンテンツ&lt;br /&gt;
//   svgMap.getGeoViewBox(): 地理的なビューボックス&lt;br /&gt;
// svgImageProps:このドキュメントに紐づいたSVGMapコンテンツの各種プロパティ&lt;br /&gt;
//   svgImageProps.scale: スケール(画面座標に対する、このsvgコンテンツの座標のスケール)&lt;br /&gt;
//&lt;br /&gt;
// 2013/01/24 : 1st ver.&lt;br /&gt;
// 2022/01/31 : WebApp layerに移植&lt;br /&gt;
&lt;br /&gt;
// このファイルの読み込み時に実行する&lt;br /&gt;
onload = function () {&lt;br /&gt;
	// このスクリプトが読み込まれた直後、refreshScreen()を呼ぶことで、&lt;br /&gt;
	//下記preRenderFunctionが初回実行される&lt;br /&gt;
	svgMap.refreshScreen();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function preRenderFunction() {&lt;br /&gt;
	// 再描画直前に実行されるコールバック関数&lt;br /&gt;
	var level = 8;&lt;br /&gt;
	// ズームレベルを計算(3から18)&lt;br /&gt;
	var level = Math.floor(Math.LOG2E * Math.log(svgImageProps.scale) + 7.5);&lt;br /&gt;
	if (level &amp;gt; 18) {&lt;br /&gt;
		level = 18;&lt;br /&gt;
	} else if (level &amp;lt; 3) {&lt;br /&gt;
		level = 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// この地図の地理座標におけるviewBox内表示させる、tileのXYとそのHashKeyを取得する&lt;br /&gt;
	var tileSet = getTileSet(svgMap.getGeoViewBox(), level);&lt;br /&gt;
&lt;br /&gt;
	// 現在読み込まれているimageというタグ名を持った(地図のタイルごとのイメージ)要素を取得&lt;br /&gt;
	console.log(&amp;quot;tileSet:&amp;quot;, tileSet);&lt;br /&gt;
	var currentTiles = svgImage.getElementsByTagName(&amp;quot;image&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	// 取得できた各タイル分以下を繰り返し、既に読み込み済みのものは再利用、表示範囲外のものは削除する&lt;br /&gt;
	for (var i = currentTiles.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
		var oneTile = currentTiles[i];&lt;br /&gt;
		var qkey = oneTile.getAttribute(&amp;quot;metadata&amp;quot;);&lt;br /&gt;
		if (tileSet[qkey]) {&lt;br /&gt;
			//				すでにあるのでスキップさせるフラグ立てる。&lt;br /&gt;
			tileSet[qkey].exist = true;&lt;br /&gt;
		} else {&lt;br /&gt;
			//				ないものなので、消去&lt;br /&gt;
			oneTile.parentNode.removeChild(oneTile);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// 表示させるタイル分以下を繰り返し、読み込まれていないファイルを読込み要素に加える&lt;br /&gt;
	for (var tkey in tileSet) {&lt;br /&gt;
		if (!tileSet[tkey].exist) {&lt;br /&gt;
			var addTile = getTile(tileSet[tkey].x, tileSet[tkey].y, level, this.CRS);&lt;br /&gt;
			svgImage.getElementsByTagName(&amp;quot;svg&amp;quot;)[0].appendChild(addTile);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 指定された場所のタイル(分割された地図イメージ)を取得&lt;br /&gt;
function getTile(tileX, tileY, level, crs) {&lt;br /&gt;
	// tileX、tileYの座標、levelのズームレベルのタイルのURLを取得。&lt;br /&gt;
	var tileURL = getURL(tileX, tileY, level);&lt;br /&gt;
&lt;br /&gt;
	// タイルのSVGにおけるbboxを得る&lt;br /&gt;
	var tLatLng = XY2latLng(tileX * tilePix, tileY * tilePix, level);&lt;br /&gt;
	var tSvg = svgMap.transform(tLatLng.lng, tLatLng.lat, crs);&lt;br /&gt;
	var tLatLngBR = XY2latLng(&lt;br /&gt;
		tileX * tilePix + tilePix,&lt;br /&gt;
		tileY * tilePix + tilePix,&lt;br /&gt;
		level&lt;br /&gt;
	);&lt;br /&gt;
	var tSvgBR = svgMap.transform(tLatLngBR.lng, tLatLngBR.lat, crs);&lt;br /&gt;
	tSvg.width = tSvgBR.x - tSvg.x; // 効率悪い・・改善後回し&lt;br /&gt;
	tSvg.height = tSvgBR.y - tSvg.y;&lt;br /&gt;
&lt;br /&gt;
	// 取得するタイル要素を作成し、各属性をセットする。&lt;br /&gt;
	var cl = svgImage.createElement(&amp;quot;image&amp;quot;);&lt;br /&gt;
	cl.setAttribute(&amp;quot;x&amp;quot;, tSvg.x);&lt;br /&gt;
	cl.setAttribute(&amp;quot;y&amp;quot;, tSvg.y);&lt;br /&gt;
	cl.setAttribute(&amp;quot;width&amp;quot;, tSvg.width);&lt;br /&gt;
	cl.setAttribute(&amp;quot;height&amp;quot;, tSvg.height);&lt;br /&gt;
	cl.setAttribute(&amp;quot;xlink:href&amp;quot;, tileURL.URL);&lt;br /&gt;
	cl.setAttribute(&amp;quot;metadata&amp;quot;, tileURL.Key);&lt;br /&gt;
&lt;br /&gt;
	return cl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 指定された地図座標geoViewBoxに、levelのズームレベルの地図を表示する場合に、必要なタイルのXYのセットを返却する&lt;br /&gt;
function getTileSet(geoViewBox, level) {&lt;br /&gt;
	var TileSet = new Object();&lt;br /&gt;
	if (geoViewBox.y + geoViewBox.height &amp;gt; 85.05113) {&lt;br /&gt;
		geoViewBox.height = 85.05113 - geoViewBox.y;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (geoViewBox.y &amp;lt; -85.05113) {&lt;br /&gt;
		geoViewBox.y = -85.05113;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// 指定エリアの、tileのXYとそのHashKeyを返却する&lt;br /&gt;
	var tlxy = latLng2XY(geoViewBox.y + geoViewBox.height, geoViewBox.x, level);&lt;br /&gt;
	var tileTLxy = XY2TileXY(tlxy);&lt;br /&gt;
	var brxy = latLng2XY(geoViewBox.y, geoViewBox.x + geoViewBox.width, level);&lt;br /&gt;
	var tileBRxy = XY2TileXY(brxy);&lt;br /&gt;
&lt;br /&gt;
	// 必要な高さ・幅分のタイル個数分以下を繰り返す&lt;br /&gt;
	for (var i = tileTLxy.y; i &amp;lt;= tileBRxy.y; i++) {&lt;br /&gt;
		for (var j = tileTLxy.x; j &amp;lt;= tileBRxy.x; j++) {&lt;br /&gt;
			// タイルのXYとズームレベルからHashKeyを取得する&lt;br /&gt;
			var qkey = getKey(j, i, level);&lt;br /&gt;
			// 上記で取得したHashKeyごとに、必要なタイル情報を設定する&lt;br /&gt;
			TileSet[qkey] = new Object();&lt;br /&gt;
			TileSet[qkey].x = j;&lt;br /&gt;
			TileSet[qkey].y = i;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return TileSet;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 緯度・経度からXYに変換&lt;br /&gt;
function latLng2XY(lat, lng, lvl) {&lt;br /&gt;
	var size = lvl2Res(lvl);&lt;br /&gt;
	var sinLat = Math.sin((lat * Math.PI) / 180.0);&lt;br /&gt;
	var pixelX = ((lng + 180.0) / 360.0) * size;&lt;br /&gt;
	var pixelY =&lt;br /&gt;
		(0.5 - Math.log((1 + sinLat) / (1.0 - sinLat)) / (4 * Math.PI)) * size;&lt;br /&gt;
	return {&lt;br /&gt;
		x: pixelX,&lt;br /&gt;
		y: pixelY,&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// XYからタイルのXYに変換&lt;br /&gt;
function XY2TileXY(xy) {&lt;br /&gt;
	var tileX = Math.floor(xy.x / tilePix);&lt;br /&gt;
	var tileY = Math.floor(xy.y / tilePix);&lt;br /&gt;
	return {&lt;br /&gt;
		x: tileX,&lt;br /&gt;
		y: tileY,&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var tilePix = 256;&lt;br /&gt;
// ズームレベルからタイルの一片のサイズを返却&lt;br /&gt;
function lvl2Res(lvl) {&lt;br /&gt;
	var j = 1;&lt;br /&gt;
	for (var i = 0; i &amp;lt; lvl; i++) {&lt;br /&gt;
		j = j * 2;&lt;br /&gt;
	}&lt;br /&gt;
	return j * tilePix;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// XYから緯度・経度に変換&lt;br /&gt;
function XY2latLng(px, py, lvl) {&lt;br /&gt;
	var size = lvl2Res(lvl);&lt;br /&gt;
	var x = px / size - 0.5;&lt;br /&gt;
	var y = 0.5 - py / size;&lt;br /&gt;
	var lat = 90 - (360 * Math.atan(Math.exp(-y * 2 * Math.PI))) / Math.PI;&lt;br /&gt;
	var lng = 360 * x;&lt;br /&gt;
	return {&lt;br /&gt;
		lat: lat,&lt;br /&gt;
		lng: lng,&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var sva = new Array(&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;);&lt;br /&gt;
var svNumb = 0;&lt;br /&gt;
var culture = &amp;quot;en-US&amp;quot;;&lt;br /&gt;
var bingRoadSearchPart = &amp;quot;.jpeg?g=849&amp;amp;amp;mkt=&amp;quot; + culture + &amp;quot;&amp;amp;amp;shading=hill&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// タイルのXYとズームレベルからURLを返却する&lt;br /&gt;
function getURL(tx, ty, lvl) {&lt;br /&gt;
	// XYとズームレベルからHashKeyを取得&lt;br /&gt;
	var tile_ans = getKey(tx, ty, lvl);&lt;br /&gt;
	// OpenStreetMapのURLを組み立てる&lt;br /&gt;
	var mapServerURL =&lt;br /&gt;
		&amp;quot;http://&amp;quot; +&lt;br /&gt;
		sva[svNumb] +&lt;br /&gt;
		&amp;quot;.tile.openstreetmap.org/&amp;quot; +&lt;br /&gt;
		lvl +&lt;br /&gt;
		&amp;quot;/&amp;quot; +&lt;br /&gt;
		tx +&lt;br /&gt;
		&amp;quot;/&amp;quot; +&lt;br /&gt;
		ty +&lt;br /&gt;
		&amp;quot;.png&amp;quot;;&lt;br /&gt;
	// 複数の同様のサーバを順次切り替えながら使用することで、地図イメージ取得時の負荷分散を行う。&lt;br /&gt;
	++svNumb;&lt;br /&gt;
	if (svNumb &amp;gt; 2) {&lt;br /&gt;
		svNumb = 0;&lt;br /&gt;
	}&lt;br /&gt;
	return {&lt;br /&gt;
		URL: mapServerURL,&lt;br /&gt;
		Key: tile_ans,&lt;br /&gt;
	};&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// HashKeyを生成し返却する&lt;br /&gt;
function getKey(tx, ty, lvl) {&lt;br /&gt;
	return tx + &amp;quot;_&amp;quot; + ty + &amp;quot;_&amp;quot; + lvl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2406</id>
		<title>リンク集</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2406"/>
		<updated>2026-02-26T07:15:22Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* このサイトの SVGMap関係リソースのインデックス */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==メディア掲載記事==&lt;br /&gt;
*[https://news.mynavi.jp/article/20240621-2970589/ 「SVGMap」とは？ ハイパーレイヤリングを使った災害情報表示システム] : 基本設計理念の解説記事 (2024年6月)&lt;br /&gt;
*[https://tech-note.kddi.com/n/nfa49e1f8d10e 災害情報が「1枚の地図」に集まらない本当の理由 - KDDIが20年以上育ててきたハイパーレイヤリングという答え]&lt;br /&gt;
&lt;br /&gt;
==スライド動画==&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/index_HLA_breakout.html W3C TPAC2025 ハイパーレイヤリングアーキテクチャ ブレークアウトセッション]&lt;br /&gt;
*[https://svgmap.org/movie/AC2024/ W3C AC2024 防災×WWW / SVGMap セッション]&lt;br /&gt;
&lt;br /&gt;
==解説音声==&lt;br /&gt;
*[https://svgmap.org/movie/address/ ハイパーレイヤリングアーキテクチャについて]&lt;br /&gt;
*[https://svgmap.org/movie/address/LaWA.html Layers as Web Apps (LaWA)について]&lt;br /&gt;
&lt;br /&gt;
==Slides==&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/crs-and-svg SVGにおける、(地理)空間参照系(CRS(Coordinate Reference System))]&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/tiling-51301496 SVGMapのタイリングアーキテクチャ]&lt;br /&gt;
*[https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-for-web-mapping-in-japanese タイリングアーキテクチャ詳細解説]&lt;br /&gt;
*SVGMapのLevel of Detail(縮尺に応じたコンテンツ制御)アーキテクチャ&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-ofdetail Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-of-detail-2 Part2]&lt;br /&gt;
*SVGMap全体のプレゼン資料&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20110311-takagi Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20120525-takagi Part2]&lt;br /&gt;
**[https://github.com/satakagi/TPAC2019-docs/blob/master/MAP.md W3C TPAC2019 MapCG slide]&lt;br /&gt;
* [https://satakagi.github.io/mapsForWebWS2020-docs/imgs/W3C%20TPAC2022%20Maps4HTMLtalk%20Satakagi.html W3C TPAC2022 Maps4HTML meeting talk - slide]&lt;br /&gt;
** [https://svgmap.org/slides/W3C%20TPAC2022%20Maps4HTMLtalk(JP).pdf 日本語版・増補版]&lt;br /&gt;
&lt;br /&gt;
==Demos==&lt;br /&gt;
*[https://svgmap.org/ svgmap.orgホームページで案内されています]&lt;br /&gt;
&lt;br /&gt;
==goSVG技術解説書(SVGMapの旧称)==&lt;br /&gt;
* gコンテンツ流通推進協議会(オリジナル:ドメイン廃止：リンク切れ) &amp;lt;!-- https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf --&amp;gt;&lt;br /&gt;
* [https://web.archive.org/web/20071012194715/https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf Internet Archive ミラー]&lt;br /&gt;
&lt;br /&gt;
==JIS規格 (X 7197：2012)==&lt;br /&gt;
*[http://kikakurui.com/x7/X7197-2012-01.html SVGMapのJIS規格書のhtml版(kikakurui.com)] &lt;br /&gt;
*[https://webdesk.jsa.or.jp/books/W11M0090/index/?bunsyo_id=JIS+X+7197%3A2012 同日本規格協会の規格書プレビュー＆購入ページ]&lt;br /&gt;
*SVGにおける地図の表現及びサービスJIS原案の概要（gコンテンツ流通推進協議会:ドメイン廃止:リンク切れ) &amp;lt;!-- https://www.g-contents.jp/filedown.php?item1=4&amp;amp;item2=11&amp;amp;page=370&amp;amp;type=1&amp;amp;mode=disp&amp;amp;admin=1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==論文等==&lt;br /&gt;
*[https://satakagi.github.io/mapsForWebWS2020-docs/ mapsForWebWS2020-docs]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/position.html position statement]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html Decentralized Web Mapping]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html Quad Tree Composite Tiling and the standardization of tiling]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/update202110.html Update on SVGMap from Fall 2020 to October 2021]&lt;br /&gt;
&lt;br /&gt;
==W3C Activities==&lt;br /&gt;
*[https://www.w3.org/submissions/2011/04/ Tiling and Layering Module for SVG Member Submission]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/HyperLayeringArchitectureCommunityReport.html Hyper-Layering CG Report on Maps for HTML CG]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/minimalMapModel.html Minimal Map Model CG Report on Maps for HTML CG]&lt;br /&gt;
==[https://discourse.wicg.io/c/web-mapping/22 discourse.wicg.io]==&lt;br /&gt;
*[https://discourse.wicg.io/t/vector-tiling-on-svgmap/3135/6 Vector Tiling on SVGMap]&lt;br /&gt;
&lt;br /&gt;
==[https://svgmap.org/devinfo/index.html このサイトの SVGMap関係リソースのインデックス]==&lt;br /&gt;
===[[OpenStreetMapデータからレイヤーを作成する]]===&lt;br /&gt;
===[[クロスオリジンアクセス]]===&lt;br /&gt;
===[https://svgmap.org/studyTemp/pdfImage/test2a.html PDFからビットイメージを抽出]===&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;diff=2405</id>
		<title>メインページ</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;diff=2405"/>
		<updated>2026-02-25T13:14:54Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* SVGMap wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://svgmap.org/ SVGMmap.orgホームページ]&lt;br /&gt;
=SVGMap wiki=&lt;br /&gt;
*[[解説書|SVGMap.js(Level0.1 Framework) API解説書]]&lt;br /&gt;
**[[内部機構解説]]&lt;br /&gt;
* DeepWikiによって生成されたソフトウェア解説書&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgmapjs svgmapjs] : SVGMapの中核となるsvgmap.jsフレームワーク&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgmapAppLayers svgmapAppLayers] : svgmap.jsにプラグインされる、各種レイヤーのLaWAアプリ&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgMapDemo svgMapDemo] : svgmapjsとsvgmapAppLayersを活用した公式デモ&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgMapTools svgMapTools] : svgmapjsに最適化された静的レイヤーを生成するJamstackパターンのバックエンドツール&lt;br /&gt;
** [https://deepwiki.com/svgmap/redisSvgMap redisSvgMap] : 同、動的配信Webサービス&lt;br /&gt;
&lt;br /&gt;
*チュートリアル&lt;br /&gt;
**[https://svgmap.org/movie/ 初歩 解説動画]&lt;br /&gt;
**[https://github.com/svgmap/svgMapTools/tree/master/tutorials SVGMapTools利用者向け チュートリアル]&amp;lt;br&amp;gt; CSVやShapefileから地図システムをプログラミングレスで構築する&lt;br /&gt;
**[[チュートリアル|開発者向け チュートリアル]]&amp;lt;br&amp;gt; SVGMap.jsのAPIを使い、カスタマイズされた地図システムを構築 (ただしサーバサイドは基本的に静的(Jamstack))&lt;br /&gt;
**[https://svgmap.github.io/tutorials/ 次世代開発者向けチュートリアルページ] (順次拡充中)&lt;br /&gt;
*[https://github.com/svgmap GitHub]&lt;br /&gt;
** [https://github.com/svgmap/svgmapjs svgmapjs]&amp;lt;br&amp;gt;ウェブブラウザ上で動作するSVGMapコンテンツビューア(フロントエンド, webApps)&lt;br /&gt;
** [https://github.com/svgmap/svgmapAppLayers svgmapAppLayers]&amp;lt;br&amp;gt;SVGMap.jsで利用できる各種レイヤー([[リンク集#.E3.82.B9.E3.83.A9.E3.82.A4.E3.83.89.E5.8B.95.E7.94.BB|Layers as Web Apps]])のライブラリ&lt;br /&gt;
** [https://github.com/svgmap/svgMapTools SVGMapTools]&amp;lt;br&amp;gt;shapeflieやcsvから、SVGMapコンテンツを生成するジェネレータソフト(バックエンド)&lt;br /&gt;
*[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.1/ SVG Map Level 0.1 dev test directory]&lt;br /&gt;
*[[リンク集]]&lt;br /&gt;
* [https://svgmap.org/ ホームページ]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;diff=2404</id>
		<title>メインページ</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;diff=2404"/>
		<updated>2026-02-24T02:53:00Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* SVGMap wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://svgmap.org/ SVGMmap.orgホームページ]&lt;br /&gt;
=SVGMap wiki=&lt;br /&gt;
*[[解説書|SVGMap.js(Level0.1 Framework) API解説書]]&lt;br /&gt;
**[[内部機構解説]]&lt;br /&gt;
* DeepWikiによって生成されたソフトウェア解説書&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgmapjs svgmapjs] : SVGMapの中核となるsvgmap.jsフレームワーク&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgmapAppLayers svgmapAppLayers] : svgmap.jsにプラグインされる、各種レイヤーのLaWAアプリ&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgMapDemo svgMapDemo] : svgmapjsとsvgmapAppLayersを活用した公式デモ&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgMapTools svgMapTools] : svgmapjsに最適化された静的レイヤーを生成するJamstackパターンのバックエンドツール&lt;br /&gt;
** [https://deepwiki.com/svgmap/redisSvgMap redisSvgMap] : 同、動的配信Webサービス&lt;br /&gt;
&lt;br /&gt;
*チュートリアル&lt;br /&gt;
**[https://svgmap.org/movie/ 初歩 解説動画]&lt;br /&gt;
**[https://github.com/svgmap/svgMapTools/tree/master/tutorials SVGMapTools利用者向け チュートリアル]&amp;lt;br&amp;gt; CSVやShapefileから地図システムをプログラミングレスで構築する&lt;br /&gt;
**[[チュートリアル|開発者向け チュートリアル]]&amp;lt;br&amp;gt; SVGMap.jsのAPIを使い、カスタマイズされた地図システムを構築 (ただしサーバサイドは基本的に静的(Jamstack))&lt;br /&gt;
*[https://github.com/svgmap GitHub]&lt;br /&gt;
** [https://github.com/svgmap/svgmapjs svgmapjs]&amp;lt;br&amp;gt;ウェブブラウザ上で動作するSVGMapコンテンツビューア(フロントエンド, webApps)&lt;br /&gt;
** [https://github.com/svgmap/svgmapAppLayers svgmapAppLayers]&amp;lt;br&amp;gt;SVGMap.jsで利用できる各種レイヤー([[リンク集#.E3.82.B9.E3.83.A9.E3.82.A4.E3.83.89.E5.8B.95.E7.94.BB|Layers as Web Apps]])のライブラリ&lt;br /&gt;
** [https://github.com/svgmap/svgMapTools SVGMapTools]&amp;lt;br&amp;gt;shapeflieやcsvから、SVGMapコンテンツを生成するジェネレータソフト(バックエンド)&lt;br /&gt;
*[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.1/ SVG Map Level 0.1 dev test directory]&lt;br /&gt;
*[[リンク集]]&lt;br /&gt;
* [https://svgmap.org/ ホームページ]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;diff=2403</id>
		<title>メインページ</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;diff=2403"/>
		<updated>2026-02-24T02:52:09Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* SVGMap wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://svgmap.org/ SVGMmap.orgホームページ]&lt;br /&gt;
=SVGMap wiki=&lt;br /&gt;
*[[解説書|SVGMap.js(Level0.1 Framework) API解説書]]&lt;br /&gt;
**[[内部機構解説]]&lt;br /&gt;
* DeepWikiによって生成されたソフトウェア解説書&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgmapjs svgmapjs] : SVGMapの中核となるsvgmap.jsフレームワーク&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgmapAppLayers svgmapAppLayers] : svgmap.jsにプラグインされる、各種レイヤーのLaWAアプリ&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgMapDemo svgMapDemo] : svgmapjsとsvgmapAppLayersを活用した公式デモ&lt;br /&gt;
** [https://deepwiki.com/svgmap/svgMapTools svgMapTools] : svgmapjsに最適化された静的地図コンテンツを生成するJamstackパターンのバックエンドツール&lt;br /&gt;
** [https://deepwiki.com/svgmap/redisSvgMap redisSvgMap] : 同、動的配信Webサービス&lt;br /&gt;
&lt;br /&gt;
*チュートリアル&lt;br /&gt;
**[https://svgmap.org/movie/ 初歩 解説動画]&lt;br /&gt;
**[https://github.com/svgmap/svgMapTools/tree/master/tutorials SVGMapTools利用者向け チュートリアル]&amp;lt;br&amp;gt; CSVやShapefileから地図システムをプログラミングレスで構築する&lt;br /&gt;
**[[チュートリアル|開発者向け チュートリアル]]&amp;lt;br&amp;gt; SVGMap.jsのAPIを使い、カスタマイズされた地図システムを構築 (ただしサーバサイドは基本的に静的(Jamstack))&lt;br /&gt;
*[https://github.com/svgmap GitHub]&lt;br /&gt;
** [https://github.com/svgmap/svgmapjs svgmapjs]&amp;lt;br&amp;gt;ウェブブラウザ上で動作するSVGMapコンテンツビューア(フロントエンド, webApps)&lt;br /&gt;
** [https://github.com/svgmap/svgmapAppLayers svgmapAppLayers]&amp;lt;br&amp;gt;SVGMap.jsで利用できる各種レイヤー([[リンク集#.E3.82.B9.E3.83.A9.E3.82.A4.E3.83.89.E5.8B.95.E7.94.BB|Layers as Web Apps]])のライブラリ&lt;br /&gt;
** [https://github.com/svgmap/svgMapTools SVGMapTools]&amp;lt;br&amp;gt;shapeflieやcsvから、SVGMapコンテンツを生成するジェネレータソフト(バックエンド)&lt;br /&gt;
*[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.1/ SVG Map Level 0.1 dev test directory]&lt;br /&gt;
*[[リンク集]]&lt;br /&gt;
* [https://svgmap.org/ ホームページ]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2402</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2402"/>
		<updated>2026-02-18T08:23:32Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* setProxyURLFactory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URL(文字列)を書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2401</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2401"/>
		<updated>2026-02-18T08:14:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* setProxyURLFactory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由等にするために、URLを書き換える関数を指定する。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2400</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2400"/>
		<updated>2026-02-18T08:14:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* setProxyURLFactory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation, LaWAfetchviaProxyFunction  ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2399</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2399"/>
		<updated>2026-02-18T07:49:47Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* レイヤー固有のUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）（[[#レイヤー固有ユーザインターフェース|こちらも参照]]）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2398</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2398"/>
		<updated>2026-02-18T07:48:42Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* レイヤー固有ユーザインターフェース */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layers as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2397</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2397"/>
		<updated>2026-02-18T07:48:15Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* レイヤー固有ユーザインターフェース */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。（Layer as Web Apps, LaWA)&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2396</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2396"/>
		<updated>2026-02-18T07:46:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* setProxyURLFactory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  [[#レイヤー固有ユーザインターフェース|LaWA]]内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2395</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2395"/>
		<updated>2026-02-18T07:43:44Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* レイヤー固有のUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  LaWA内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（LaWA、レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2394</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2394"/>
		<updated>2026-02-18T07:41:08Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* setProxyURLFactory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** LaWAfetchviaProxyFunction :  LaWA内のFetch/XHRに対してプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2393</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2393"/>
		<updated>2026-02-03T01:26:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* initGenericTool */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2392</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2392"/>
		<updated>2026-02-03T01:25:22Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* initPolygonTools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2391</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2391"/>
		<updated>2026-02-03T01:24:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* initPOItools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
*** styleEditor: trueでスタイル編集UI追加&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2390</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2390"/>
		<updated>2026-02-02T23:10:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* setCenterHitTest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
&lt;br /&gt;
======setCursorCenterZooming======&lt;br /&gt;
*setCursorCenterZooming(enable) : (カーソル|ピンチ)位置中心ズーム機能を設定する デフォルト:false&lt;br /&gt;
&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB&amp;diff=2389</id>
		<title>チュートリアル</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB&amp;diff=2389"/>
		<updated>2026-01-27T14:30:51Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* WebApp Layer編 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
SVGMapのチュートリアルです。簡単なものから応用的なものまで少しずつ紹介いたします。特に自身でSVGMapコンテンツを構築するシステム開発者向けの資料となっています。&lt;br /&gt;
&lt;br /&gt;
開発無しに手持ちのデータをツールを使ってSVGMapとして利用したいという利用者には[https://github.com/svgmap/svgMapTools/tree/master/tutorials こちらのチュートリアル]を推奨します。 &lt;br /&gt;
&lt;br /&gt;
*チュートリアルプログラムのディレクトリ構成。&lt;br /&gt;
* 各チュートリアル1～Nのディレクトリ下の内容を丸ごとコピーすれば、そのチュートリアルでつくられるコンテンツが動作するようになっています。&lt;br /&gt;
** [[チュートリアル1#Note:.E3.80.80.E3.83.81.E3.83.A5.E3.83.BC.E3.83.88.E3.83.AA.E3.82.A2.E3.83.AB.E3.81.A7.E4.BD.BF.E7.94.A8.E3.81.99.E3.82.8B.E3.82.B3.E3.83.B3.E3.83.86.E3.83.B3.E3.83.84.E3.81.AE.E3.83.80.E3.82.A6.E3.83.B3.E3.83.AD.E3.83.BC.E3.83.89|チュートリアルで使うファイルのダウンロード方法]]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 └─devinfo&lt;br /&gt;
　　　└─devkddi&lt;br /&gt;
　　　　　└─tutorials&lt;br /&gt;
　　　　　　　├─tutorial1   チュートリアル1&lt;br /&gt;
　　　　　　　 .&lt;br /&gt;
　　　　　　　 .&lt;br /&gt;
　　　　　　　└─tutorialN   チュートリアルN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 基本編 =&lt;br /&gt;
SVGMap.jsを用いた地図コンテンツ(ウェブページ)を構築する　基本的なチュートリアルです。&lt;br /&gt;
&lt;br /&gt;
基本編はすべて静的なファイル(コンテンツ)だけで構成されます。javascriptによるWebAppのコーディングも行いません。&lt;br /&gt;
&lt;br /&gt;
また、サーバ側にもDBMSやGISサーバエンジンは設置しません。（なお、サーバ側に動的なものを設置しない点は、[[#WebApp_Layer.E7.B7.A8|WebApp Layer編]]も同様）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== チュートリアル1 海岸線地図表示 ==&lt;br /&gt;
&lt;br /&gt;
最初に日本の海岸線を表示するチュートリアルです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/tutorial1/tutorial1.html こちら]をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、[[チュートリアル1]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
*ファイル構成 [https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial1/ tutorial1ディレクトリ]に以下のファイルがあります。** [[チュートリアル1#Note:.E3.80.80.E3.83.81.E3.83.A5.E3.83.BC.E3.83.88.E3.83.AA.E3.82.A2.E3.83.AB.E3.81.A7.E4.BD.BF.E7.94.A8.E3.81.99.E3.82.8B.E3.82.B3.E3.83.B3.E3.83.86.E3.83.B3.E3.83.84.E3.81.AE.E3.83.80.E3.82.A6.E3.83.B3.E3.83.AD.E3.83.BC.E3.83.89|チュートリアルで使うファイルのダウンロード方法]]を解説します。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial1/tutorial1.html tutrial1.html]&lt;br /&gt;
***SVGMapのコアプログラムファイル(SVGMapLv0.1_r17.jsおよびSVGMapLv0.1_LayerUI2_r4.js)を読み込み、SVGMapの各種APIを利用可能にする。&lt;br /&gt;
***地図表示部分を(DIVで)定義し、そこに表示するレイヤをまとめたSVGファイル(Containers.svg)を読み込む(上記SVGMapのコアプログラムにて自動的にVisibleになっているレイヤが表示される)。&lt;br /&gt;
***ズームアップ・ズームダウン・GPSの各ボタンの表示とクリック時の動作(SVGMapのコアプログラムのそれぞれのAPIを呼び出す)を定義。&lt;br /&gt;
****ズームアップボタン:svgMap.zoomup() APIを呼び出すことで地図をズームアップする。&lt;br /&gt;
****ズームダウンボタン:svgMap.zoomdown() APIを呼び出すことで地図をズームダウンする。&lt;br /&gt;
****GPSボタン:svgMap.gps() APIを呼び出すことで、現在地(PCやスマートフォンの位置、特定できる場合のみ)を中心にズームアップ表示する。&lt;br /&gt;
***中心を表す十字マークを表示。&lt;br /&gt;
***上記十字マークが示している地図上の緯度・経度の表示(実際には、地図の移動時に地図の中心の緯度・経度を表示する)。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial1/Container.svg Container.svg]&lt;br /&gt;
***表示する各レイヤ用のSVGファイルを読み込む(Coastline.svgのみを読み込んでいる)&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial1/Coastline.svg Coastline.svg]&lt;br /&gt;
***日本の海岸線のデータを多数の線で定義している。&lt;br /&gt;
&lt;br /&gt;
== チュートリアル2a 海岸線地図と空港POI表示 ==&lt;br /&gt;
&lt;br /&gt;
チュートリアル1の内容に空港のPOI([https://ja.wikipedia.org/wiki/Point_of_interest Point of interest])を表示するチュートリアルです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は[https://svgmap.org/devinfo/devkddi/tutorials/tutorial2/tutorial2.html こちら]をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル2a]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
&lt;br /&gt;
*ファイル構成は[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial2 tutorial2ディレクトリ]に以下のファイルがあります。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial2/tutorial2.html tutrial2.html]&lt;br /&gt;
***チュートリアル2用のhtml。tutrial1.htmlと同様の内容。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial2/Container.svg Container.svg]&lt;br /&gt;
***表示する各レイヤ用のSVGファイルを読み込む(Coastline_Airport.svgのみを読み込んでいる)&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial2/Coastline_Airport.svg Coastline_Airport.svg]&lt;br /&gt;
***チュートリアル1のCoastline.svgに空港情報を追加。&lt;br /&gt;
***空港の表示イメージの定義・実際の空港情報(緯度・経度、使用するイメージ、タイトル、クリック時の表示情報)を記述。&lt;br /&gt;
***空港情報以外にhttpリンクも記述できる。この場合、以下の内容が実行可能になる。&lt;br /&gt;
****空港イメージをクリックすると他のWebページに遷移する。&lt;br /&gt;
****現在のURLに対してハッシュを付加することで、地図の表示位置を変更できる。&lt;br /&gt;
****上記の内容を1つの空港に対して、設定することができる(クリック後に、空港情報表示かURL遷移かを選択するダイアログが表示される)&lt;br /&gt;
&lt;br /&gt;
== チュートリアル2b 海岸線地図とPOI(空港)表示　(レイヤリング) ==&lt;br /&gt;
チュートリアル2aの内容に対して、POI(空港)と海岸線地図を別ファイルに分け、レイヤリング表示するチュートリアルです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は[https://svgmap.org/devinfo/devkddi/tutorials/tutorial2b/tutorial2b.html こちら]をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
*'''詳細は、 [[チュートリアル2b]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
&lt;br /&gt;
*ファイル構成は[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial2b/ tutorial2bディレクトリ]に以下のファイルがあります。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial2b/tutorial2b.html tutrial2b.html]&lt;br /&gt;
***チュートリアル2b用のhtml。tutrial1.htmlに対して、レイヤーリスト・On/Off UIを設置している。(id=&amp;quot;layerList&amp;quot;のdiv要素)&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial2b/Container.svg Container.svg]&lt;br /&gt;
***表示する各レイヤ用のSVGファイルを読み込む（Airport.svgと、Coastline.svgの２個のファイル(レイヤ)を読み込んでいる）&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial2b/Airport.svg Airport.svg]&lt;br /&gt;
***空港情報を別ファイルとして追加。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial2b/Coastline.svg Coastline.svg]&lt;br /&gt;
***チュートリアル1のCoastline.svg&lt;br /&gt;
&lt;br /&gt;
== チュートリアル2c OpenStreetMapとPOI(空港)表示　(レイヤリング) ==&lt;br /&gt;
チュートリアル2bの内容に対して、背景地図にOpenStreetMapを使用し、より実用的なページを作ってみます。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は[https://svgmap.org/devinfo/devkddi/tutorials/tutorial2c/tutorial2c.html こちら]をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
*'''詳細は、 [[チュートリアル2c]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
&lt;br /&gt;
*ファイル構成はtutrial2cディレクトリに以下のファイルがあります。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial2c/tutorial2c.html tutrial2c.html]&lt;br /&gt;
*Container.svgで参照している背景地図を、Coastline.svgからdynamicOSM_r11.svgに置き換えています。&lt;br /&gt;
**dynamicOSM_r11.svgはjavascriptコードが紐付けられた動的なコンテンツ(WebAppLayer)になっています。本章ではその内容は割愛し、実用的なレイヤリングを実践してみます。&lt;br /&gt;
*** Note: 動的なコンテンツの詳細は[[#WebApp_Layer.E7.B7.A8|WebApp Layer編]]で解説されています。&lt;br /&gt;
&lt;br /&gt;
== チュートリアル3 タイリングされた海岸線地図の表示 ==&lt;br /&gt;
&lt;br /&gt;
チュートリアル1の内容を複数のタイルに分割して表示するチュートリアルです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は[https://svgmap.org/devinfo/devkddi/tutorials/tutorial3/tutorial3.html こちら]をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
*'''詳細は、 [[チュートリアル3]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
*ファイル構成は[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/ tutorial3ディレクトリ]に以下のファイルがあります。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/tutorial3.html tutorial3.html]&lt;br /&gt;
***チュートリアル3用のhtml。tutrial1.htmlと同様の内容。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/Container.svg Container.svg]&lt;br /&gt;
**[https://www.svgmap.org//devinfo/devkddi/tutorials/tutorial3/Coastline.svg Coastline.svg]&lt;br /&gt;
***以下の4×4(全16)分割したファイルを束ねるsvg。&lt;br /&gt;
***タイリングについては、[https://www.slideshare.net/totipalmate/tiling-51301496 SVGMapのタイリングアーキテクチャ]を参照。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/0_0.svg 0_0.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/0_1.svg 0_1.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/0_2.svg 0_2.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/0_3.svg 0_3.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/1_0.svg 1_0.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/1_1.svg 1_1.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/1_2.svg 1_2.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/1_3.svg 1_3.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/2_0.svg 2_0.svg]&lt;br /&gt;
**[https://www.svgmap.org//devinfo/devkddi/tutorials/tutorial3/2_1.svg 2_1.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/2_2.svg 2_2.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/2_3.svg 2_3.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/3_0.svg 3_0.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/3_1.svg 3_1.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/3_2.svg 3_2.svg]&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3/3_3.svg 3_3.svg]&lt;br /&gt;
&lt;br /&gt;
== チュートリアル3b タイリング (svgMapToolsを用いた静的タイルの作成) ==&lt;br /&gt;
&lt;br /&gt;
前章ではすでに作成済みのタイルを用いていましたが、ここでは[https://github.com/svgmap/svgMapTools svgMapTools]を用いて、shapefileからタイルデータを作成し表示してみます。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は[https://svgmap.org/devinfo/devkddi/tutorials/tutorial3b/tutorial3b.html こちら]をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
*'''詳細は、 [[チュートリアル3b]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
*ファイル構成は[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3b/ tutorial3bディレクトリ]ディレクトリに以下のファイルがあります。&lt;br /&gt;
** https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial3b/&lt;br /&gt;
*svgMapToolsを使って、地球地図 日本のデータのうちいくつかをタイリングされたSVGMapコンテンツに変換。&lt;br /&gt;
**svgMapToolsが行うタイリング(Quad Tree Composite Tiling)については、[https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-for-web-mapping-in-japanese こちらの資料]を参照。&lt;br /&gt;
*変換したコンテンツを、レイヤーとして表示&lt;br /&gt;
&lt;br /&gt;
== チュートリアル4 Bitmapイメージ地図表示 ==&lt;br /&gt;
&lt;br /&gt;
チュートリアル1の内容に一部のBitmapイメージ地図を重ねて表示するチュートリアルです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は[https://svgmap.org/devinfo/devkddi/tutorials/tutorial4/tutorial4.html こちら]をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
*'''詳細は、 [[チュートリアル4]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
*ファイル構成は[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial4/tutorial4.html tutrial4ディレクトリ]に以下のファイルがあります。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial4/tutorial4.html tutorial4.html]&lt;br /&gt;
***チュートリアル4用のhtml。tutrial1.htmlと同様の内容。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial4/Container.svg Container.svg]&lt;br /&gt;
***チュートリアル1と同様のCoastline.svgと重ね合わせて表示するビットマップイメージのbitmapImage.svgを読み込む&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial4/dynamicOSM_r11.svg dynamicOSM_r11.svg]&lt;br /&gt;
***チュートリアル2cと同様のOpenStreetMapレイヤー&lt;br /&gt;
&lt;br /&gt;
*重ね合わせるビットマップイメージSVGファイル。&lt;br /&gt;
**こちらのツールを使用して作成したもの。 [https://svgmap.org/devinfo/devkddi/lvl0.1/bitimage2geoInfo/mapPage/ ビットイメージの地図画像をSVGMapのレイヤー化するツール]&lt;br /&gt;
&lt;br /&gt;
= WebApp Layer編 =&lt;br /&gt;
SVGMapでは、レイヤーとして 単純な静的SVGMapコンテンツだけでなく、レイヤーにウェブアプリケーションを紐付けることでレイヤーのSVGMapコンテンツ(のDOM)をjavaScriptコードで動的に制御・変更できる[[解説書#.E3.82.A6.E3.82.A7.E3.83.96.E3.82.A2.E3.83.97.E3.83.AA.E3.82.B1.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AB.E3.82.88.E3.82.8B.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.81.A8.E3.80.81.E3.81.9D.E3.81.AE.E3.83.8F.E3.82.A4.E3.83.91.E3.83.BC.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.AA.E3.83.B3.E3.82.B0|WebApp Layer機構 (Layers as Web Apps : LaWA)]]を用いることができるという特徴があります。([https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3 Web Applicationとは])&lt;br /&gt;
&lt;br /&gt;
この機構は他のレイヤーには基本的に影響を与えないため（[https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96 カプセル化]）、アプリケーションの[https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%91%E3%82%B2%E3%83%86%E3%82%A3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0 スパゲッティ化]を抑制できます。&lt;br /&gt;
&lt;br /&gt;
WebApp Layer編はこの機能を使うWebAppをコーディングします。　ただし、サーバ側には基本編と同様に動的な仕組みの構築は不要です。（依然としてサーバには静的なコンテンツ・WebAppのファイル(htmlやjs)を設置するだけで、DBMSや動的な機構([https://ja.wikipedia.org/wiki/Web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9 ウェブサービス])をサーバ上に構築しません。）&lt;br /&gt;
&lt;br /&gt;
なお、SVGMap.jsはWMSやWFSのような動的に地図・地理情報を配信する仕組みやDBMSを用いた動的なサーバ([https://ja.wikipedia.org/wiki/Web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9 ウェブサービス])を接続して動作させることも可能です。[[#.E3.82.A6.E3.82.A7.E3.83.96.E3.82.B5.E3.83.BC.E3.83.93.E3.82.B9.E7.B5.90.E5.90.88.E7.B7.A8|ウェブサービス結合編]]を参照ください。&lt;br /&gt;
&lt;br /&gt;
== チュートリアル5 WebApp Layer タイルピラミッド==&lt;br /&gt;
&lt;br /&gt;
[https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames OpenStreetMapのタイルピラミッド]を用いて、伸縮・スクロールに応じ適切な地図を表示([https://en.wikipedia.org/wiki/Level_of_detail_(computer_graphics) Level of Detail])するレイヤーを、SVGMapの[[解説書#.E3.82.A6.E3.82.A7.E3.83.96.E3.82.A2.E3.83.97.E3.83.AA.E3.82.B1.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AB.E3.82.88.E3.82.8B.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.81.A8.E3.80.81.E3.81.9D.E3.81.AE.E3.83.8F.E3.82.A4.E3.83.91.E3.83.BC.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.AA.E3.83.B3.E3.82.B0|WebApp Layer機構]]によって構成するチュートリアルです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5/tutorial5.html こちら]をクリック。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
*'''詳細は、 [[チュートリアル5]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
*ファイル構成は[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial5 tutorial5]ディレクトリに以下のファイルがあります。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial5/tutorial5.html tutorial5.html]&lt;br /&gt;
***チュートリアル5用のhtml。tutrial2b.htmlと同様の内容。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial5/Container.svg Container.svg]&lt;br /&gt;
***外部のOpenStreetMapを表示するためのdynamicOSM_r11.svgを読み込む。&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial5/dynamicOSM_r11.svg dynamicOSM_r11.svg]&lt;br /&gt;
***外部のOpenStreetMapを表示するSVGMapコンテンツのレイヤー(中身は空で下のウェブアプリケーションがDOMを動的に構築している)&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial5/dynamicOSM_r11.html dynamicOSM_r11.html]&lt;br /&gt;
***上記dynamicOSM_r11.svgに紐づいたウェブアプリケーションのhtml&lt;br /&gt;
**[https://www.svgmap.org/devinfo/devkddi/tutorials/tutorial5/dynamicOSM_r11.js dynamicOSM_r11.js]&lt;br /&gt;
***上記dynamicOSM_r11.svgに紐づいたウェブアプリケーションのjavascriptコード&lt;br /&gt;
&lt;br /&gt;
== チュートリアル6 WebApp Layer geoJSON==&lt;br /&gt;
webAppで非同期読み込みにより[https://ja.wikipedia.org/wiki/GeoJSON GeoJSONデータ]を読み込み、SVGMapフレームワークのライブラリを使ってSVGMapコンテンツのDOMに変換し表示するチュートリアルです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/geojson1/geojson1.html geojson1.html] をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル6]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
*[https://svgmap.org/devinfo/devkddi/tutorials/geojson1/ tutorial6ディレクトリ]&lt;br /&gt;
*geojson1.html: 周辺ライブラリ(SVGMapGIS)の読み込み&lt;br /&gt;
*Container.svg: クリッカブルなレイヤリングの設定&lt;br /&gt;
*geoJsonExample1.svg: UIを持ったレイヤーを操作するwebAppを指定する方法&lt;br /&gt;
*geoJsonExample1.html:&lt;br /&gt;
*geoJsonExample1.js: svgMapGIStoolによるGeoJsonデータのSVGMapコンテンツ化&lt;br /&gt;
&lt;br /&gt;
== チュートリアル7 WebApp Layer ベクトルタイル==&lt;br /&gt;
webAppで非同期読み込みによりタイル分割されたCSVのPointジオメトリファイルを読み込み、SVGMapフレームワークのライブラリを使ってSVGMapコンテンツのDOMに変換し表示するチュートリアルです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/tiling1/tiling1.html tiling1.html] をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
*'''詳細は、 [[チュートリアル7]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
*[https://svgmap.org/devinfo/devkddi/tutorials/tiling1/ ソースコードのディレクトリ]&lt;br /&gt;
*tiling1.html: 周辺ライブラリ(SVGMapGIS)の読み込み&lt;br /&gt;
*Container.svg: クリッカブルなレイヤリングの設定 ([[チュートリアル6]]とほぼ同じ)&lt;br /&gt;
*simpleTiling.svg: UIを持ったレイヤーを操作するwebApp [[チュートリアル6]]とほぼ同じ&lt;br /&gt;
*simpleTiling.html: &lt;br /&gt;
*simpleTiling.js: &lt;br /&gt;
**GeoJsonを読む点は[[チュートリアル6]]と同様&lt;br /&gt;
**表示領域に応じてGeoJsonを動的に読み込む&lt;br /&gt;
***小縮尺(広いエリア)表示のとき、読み込むタイルが多くなりすぎる場合は読み込みをやめ表示させない&lt;br /&gt;
&lt;br /&gt;
== チュートリアル8 WebApp Layer メッシュデータ==&lt;br /&gt;
webAppで非同期読み込みにより、2次元配列形式のメッシュデータ（グリッドデータ、ラスターデータなどとも呼ばれます）のCSVファイルを読み込み、SVGMapコンテンツのDOMに変換し表示するチュートリアルです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/mesh1/mesh1.html mesh1.html] をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル8]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
*[https://svgmap.org/devinfo/devkddi/tutorials/mesh1/ ソースコードのディレクトリ]&lt;br /&gt;
*このチュートリアルで扱うメッシュデータの形式を決める&lt;br /&gt;
*Container.svg: クリッカブルなレイヤーを指定&lt;br /&gt;
*ArrayMesh.svg: webAppが紐付けられたレイヤー&lt;br /&gt;
*ArrayMesh.html:&lt;br /&gt;
*ArrayMesh.js: メッシュデータを読み込み、一個一個のメッシュをsvgのrect要素として可視化。&lt;br /&gt;
&lt;br /&gt;
== チュートリアル9 WebApp Layer メッシュタイル (タイル分割されたメッシュデータ)==&lt;br /&gt;
&lt;br /&gt;
webAppで非同期読み込みにより、タイル分割されたメッシュデータを表示するチュートリアルです。読み込むメッシュデータは地域基準メッシュをベースとした[[チュートリアル8#Gridded_XYZ|Gridded XYZ]]データとし、小縮尺データおよび大縮尺データを用意して簡単なタイルピラミッドを構成し、[https://en.wikipedia.org/wiki/Level_of_detail_(computer_graphics) Level of Detail]を実装しています。&lt;br /&gt;
&lt;br /&gt;
可視化に用いるサンプルデータは統計局が公開する[https://www.stat.go.jp/data/mesh/m_itiran.html 3次メッシュの自治体コード]データです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/mesh2/mesh2.html mesh2.html] をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル9]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
* [https://svgmap.org/devinfo/devkddi/tutorials/mesh2/ ソースコードのディレクトリ]&lt;br /&gt;
*このチュートリアルで扱うメッシュデータの形式&lt;br /&gt;
*Container.svg: クリッカブルなレイヤーを指定&lt;br /&gt;
*meshTileViewer.svg: webAppが紐付けられたレイヤー、webAppsは隠れた状態で起動&lt;br /&gt;
*meshTileViewer.html:&lt;br /&gt;
*meshTileViewer.js: メッシュデータを読み込み、一個一個のメッシュをsvgのrect要素として可視化。&lt;br /&gt;
&lt;br /&gt;
== チュートリアル9b WebApp Layer メッシュタイル カスタムダイアログ==&lt;br /&gt;
チュートリアル9の内容に加えて、メッシュをクリックしたときに出現するダイアログをカスタマイズしています。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/mesh2b/mesh2b.html mesh2b.html] をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル9b]]を参照。'''&lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
* [https://svgmap.org/devinfo/devkddi/tutorials/mesh2b/ ソースコードのディレクトリ]&lt;br /&gt;
*meshTileViewerB.html: レイヤーに紐付けられたwebApp。チュートリアル９の内容に加え、オブジェクトをクリックしたときに起動するコールバック関数を設定し、ダイアログをカスタマイズしています。&lt;br /&gt;
&lt;br /&gt;
== チュートリアル10 WebApp Layer メッシュデータのビットイメージ化==&lt;br /&gt;
メッシュデータ（グリッドデータ）は[[チュートリアル8#Raster|ラスターデータとも呼ばれる]]ように、Webコンテンツとして使われるビットイメージデータとほぼ同等です。そこでメッシュデータを動的にビットイメージコンテンツ(PNG形式)化し地図画面上に表示するWebAppを構築してみます。性能面でのメリットがあります。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/mesh3/mesh3.html mesh3.html] をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル10]]を参照。''' &lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
* [https://svgmap.org/devinfo/devkddi/tutorials/mesh3/ ソースコードのディレクトリ]&lt;br /&gt;
*地理院が公開する[https://fgd.gsi.go.jp/download/geoid.php ジオイド高データ](TEXTデータ)をfetchAPIで読み込み変数(Object)に保持する&lt;br /&gt;
*canvas要素のAPIを用いてビットイメージを構築&lt;br /&gt;
*dataURI化してSVGのimage要素にし、地図上に配置&lt;br /&gt;
&lt;br /&gt;
== チュートリアル11 WebApp Layer 地図を使った位置指定UI==&lt;br /&gt;
[[チュートリアル10]]をベースに、地図上で位置を指定して、その場所のジオイド高を計算・表示する対話型アプリを構築します。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/mesh3b/mesh3b.html mesh3b.html] をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル11]]を参照。''' &lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
* [https://svgmap.org/devinfo/devkddi/tutorials/mesh3b/ ソースコードのディレクトリ]&lt;br /&gt;
*バイリニア補完によるメッシュデータを利用した任意位置の値の計算&lt;br /&gt;
*地図上の任意の点を指定して、その位置のジオイド高を表示&lt;br /&gt;
&lt;br /&gt;
=ウェブサービス結合編=&lt;br /&gt;
SVGMap.jsは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html 高度で柔軟なタイリング機構]により[https://en.wikipedia.org/wiki/Jamstack Jamstackのパターン]を幅広く活用できるため、サーバのオーバヘッドが大きい動的なウェブサービスが必要なケースを従来のフレームワークと比べて大幅に減らすことができます。（参考:[https://github.com/svgmap/svgMapTools/tree/master/tutorials SVGMapToolsを使ったチュートリアル]、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html Quad Tree Composite Tiling and the standardization of tiling]）&lt;br /&gt;
&lt;br /&gt;
それでも動的なサービスの結合が必要なことは多くあるため、ここではその方法を既存の公開ウェブサービスを利用したwebAppレイヤーとして実装してみます。（依ってこのチュートリアルでは動的なサービスの利用に留まり、動的なサービス側を構築することには踏み込みません。[https://ja.wikipedia.org/wiki/GeoServer GeoServer], [https://ja.wikipedia.org/wiki/MapServer MapServer], [https://gis-ops.com/postgrest-postgis-api-tutorial-geospatial-api-in-5-minutes/ PostgREST + PostGIS ] 等はその実装に利用できるでしょう。SVGMap.orgでも [https://github.com/svgmap/redisSvgMap redisSvgMap]という 高性能な動的サービスを構築するためのコードを公開しています。）&lt;br /&gt;
&lt;br /&gt;
サービスを個々のレイヤーとして接続すること、そして個々のレイヤーはカプセル化されたアプリケーション([[解説書#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|Layers as WebApps]])として構成される（疎結合である）ことから、このパターンは地図に適用した[https://en.wikipedia.org/wiki/Micro_frontend マイクロフロントエンド]（もしくは[https://learn.microsoft.com/ja-jp/dotnet/architecture/microservices/architect-microservice-container-applications/microservice-based-composite-ui-shape-layout コンポジットUI]）タイプの[https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9 マイクロサービス]の一種といえるでしょう。&lt;br /&gt;
&lt;br /&gt;
== クロスオリジンアクセス==&lt;br /&gt;
外部のウェブサービスを結合する場合、外部サービスによってはクロスオリジンアクセスとなることを理解し対処する必要があります。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
*'''[[クロスオリジンアクセス|こちらに情報を掲載]]'''しましたので参照ください。&lt;br /&gt;
&lt;br /&gt;
== チュートリアル12 WMSの利用==&lt;br /&gt;
指定したパラーメータに従ってビットイメージの地図データを出力するウェブサービス仕様[https://ja.wikipedia.org/wiki/Web_Map_Service Web Map Service (WMS)]のサービスをSVGMapのレイヤーとして表示させてみます。&lt;br /&gt;
&lt;br /&gt;
[https://www.gebco.net/data_and_products/gebco_web_services/web_map_service/ GEBCO Web Service]([https://ja.wikipedia.org/wiki/%E5%A4%A7%E6%B4%8B%E6%B0%B4%E6%B7%B1%E7%B7%8F%E5%9B%B3 海底を含む全球地形図])を使ってみます。&lt;br /&gt;
&lt;br /&gt;
まずは伸縮スクロールとは関係なく、地図コンテンツを単に表示させてみます。これは[[チュートリアル4]]と行っていることは基本的に同じです。WMSのスペックに従ってURLのクエリパートを設定するだけです。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/wms1/wms1.html wms1.html] をクリック。]&lt;br /&gt;
**（Note: WMSが地図を生成配信するまでに少々時間がかかります）&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル12]]を参照。''' &lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
* [https://svgmap.org/devinfo/devkddi/tutorials/wms1/ ソースコードのディレクトリ]&lt;br /&gt;
*WMSのパラメータとSVGMapコンテンツのビットイメージ配置のパラメータの関係を理解します&lt;br /&gt;
*image要素によって、WMSから取得したデータを配置します&lt;br /&gt;
&lt;br /&gt;
== チュートリアル13 WebApp Layer WMS 伸縮スクロールに応じた表示==&lt;br /&gt;
[[解説書#.E3.82.A6.E3.82.A7.E3.83.96.E3.82.A2.E3.83.97.E3.83.AA.E3.82.B1.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AB.E3.82.88.E3.82.8B.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.81.A8.E3.80.81.E3.81.9D.E3.81.AE.E3.83.8F.E3.82.A4.E3.83.91.E3.83.BC.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.AA.E3.83.B3.E3.82.B0|WebApp Layer機構]]を用いれば、ウェブサービスに接続し表示領域に応じた地図コンテンツを動的に表示することができます。チュートリアル12と同じ[https://www.gebco.net/data_and_products/gebco_web_services/web_map_service/ GEBCO Web Service]を使ってみます。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/wms2/wms2.html wms2.html] をクリック。&lt;br /&gt;
**（Note: WMSが地図を生成配信するまでに少々時間がかかります）&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル13]]を参照。''' &lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
* [https://svgmap.org/devinfo/devkddi/tutorials/wms2/ ソースコードのディレクトリ]&lt;br /&gt;
*表示領域のパラメータを伸縮スクロールの度に取得します。&lt;br /&gt;
*このパラメータを用いて、WMSへのクエリURLを構築します。&lt;br /&gt;
*image要素によって、WMSから取得したデータを配置します&lt;br /&gt;
*1ステップ前のimage要素は消去します。&lt;br /&gt;
&lt;br /&gt;
==チュートリアル14 WebApp Layer ベクトル地理情報サービスの結合==&lt;br /&gt;
&lt;br /&gt;
動的にベクトルデータが生成・配信されているサービスをSVGMap.jsに結合します。ここではUSGS Hazards Programが配信している、[https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php 世界の地震発生状況データ](GeoJSON版)を結合してみます。&lt;br /&gt;
&lt;br /&gt;
動的なサービスと接続してはいますが、基本的には[[#.E3.83.81.E3.83.A5.E3.83.BC.E3.83.88.E3.83.AA.E3.82.A2.E3.83.AB6_WebApp_Layer_geoJSON|チュートリアル6]]との違いはありません。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/geojson2/geojson2.html geojson2.html] をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル14]]を参照。''' &lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
[[#.E3.83.81.E3.83.A5.E3.83.BC.E3.83.88.E3.83.AA.E3.82.A2.E3.83.AB6_WebApp_Layer_geoJSON|チュートリアル6]]に対し、以下が相違点です。&lt;br /&gt;
* [https://svgmap.org/devinfo/devkddi/tutorials/geojson2/ ソースコードのディレクトリ]&lt;br /&gt;
*geoJsonExample2.html: &lt;br /&gt;
**[https://earthquake.usgs.gov/earthquakes/feed/ USGS Earthquake Hazards Program Feed]の仕様に基づいたGeoJsonリクエスト用URLの生成とそのためのUI&lt;br /&gt;
**同仕様に基づいたメタデータ表示設定&lt;br /&gt;
**10分に一回更新&lt;br /&gt;
&lt;br /&gt;
==チュートリアル15 WebApp Layer 伸縮スクロールに応じたベクトル地理情報サービス結合==&lt;br /&gt;
&lt;br /&gt;
動的にベクトルデータが生成・配信されているサービスをSVGMap.jsに結合します。前章と異なり、伸縮スクロールする度にその表示領域に応じたデータをサービスから取得して表示します。&lt;br /&gt;
&lt;br /&gt;
ここではNatural Resources Canadaが提供している、[https://www.nrcan.gc.ca/maps-tools-and-publications/maps/geographical-names-canada/application-programming-interface-api/9249 Geoname Service API](カナダの地名データサービス)を結合してみます。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/vectorService1/vectorService1.html vectorService1.html] をクリック。&lt;br /&gt;
**（Note: サービスがデータを生成配信するまでに少々時間がかかります）&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[チュートリアル15]]を参照。''' &lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
* [https://svgmap.org/devinfo/devkddi/tutorials/vectorService1/ ソースコードのディレクトリ]&lt;br /&gt;
*表示領域のパラメータを伸縮スクロールの度に取得します。&lt;br /&gt;
*このパラメータを用いて、[https://www.nrcan.gc.ca/maps-tools-and-publications/maps/geographical-names-canada/application-programming-interface-api/9249 仕様に]基づきサービスへのクエリURLを構築、CSVを取得します。&lt;br /&gt;
*ポイントデータをSVGのuse要素として可視化します。&lt;br /&gt;
*1ステップ前のデータは消去します。&lt;br /&gt;
&lt;br /&gt;
= 既成WebApp Layer活用編 =&lt;br /&gt;
githubの[https://github.com/svgmap/svgmapAppLayers svgmapAppLayers]リポジトリでオープンソースとして公開されている、SVGMap.jsで利用できる開発済みの様々な[[解説書#.E3.82.A6.E3.82.A7.E3.83.96.E3.82.A2.E3.83.97.E3.83.AA.E3.82.B1.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AB.E3.82.88.E3.82.8B.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.81.A8.E3.80.81.E3.81.9D.E3.81.AE.E3.83.8F.E3.82.A4.E3.83.91.E3.83.BC.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.AA.E3.83.B3.E3.82.B0|WebApp Layer]]を利用する方法を説明します。&lt;br /&gt;
&lt;br /&gt;
==svgmapAppLayers GitHub Pagesの利用==&lt;br /&gt;
[https://github.com/svgmap/svgmapAppLayers svgmapAppLayers] GitHubリポジトリは、[https://docs.github.com/ja/pages/getting-started-with-github-pages/what-is-github-pages GitHub Pages]のセットアップがなされています。そのためいくつかのレイヤーはGitHub Pagesで公開されたURLをリンクするだけで利用することができます。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は、[https://svgmap.org/devinfo/devkddi/tutorials/ghAppLayers/ghAppLayers_wpxy.html ghAppLayers_wpxy.html] をクリック。&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[svgmapAppLayers GitHub Pagesの利用]]を参照。''' &lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
* svgmapAppLayersのルートディレクトリのGitHub PagesのURLは、https://svgmap.github.io/svgmapAppLayers/&lt;br /&gt;
* svgmapAppLayersに登録されているレイヤーの一覧は [https://github.com/svgmap/svgmapAppLayers/blame/main/Container.svg Container.svgのソース]で確認&lt;br /&gt;
** svgmapAppLayersのGitHub PagesのwebAppを直接参照できないレイヤーは data-cross-origin-restrictedアトリビュートが付いています&lt;br /&gt;
** クロスオリジンアクセスプロキシの設定が必要なレイヤーは、data-cross-origin-proxy-requiredアトリビュートが付いています&lt;br /&gt;
** [https://svg2.mbsrv.net/devinfo/devkddi/tutorials/ghAppLayers/containerGenerator.html コンテナsvg生成支援webApp]を使うと簡単にContainer.svgを生成できます&lt;br /&gt;
* 必要に応じてプロキシーを構築する&lt;br /&gt;
&lt;br /&gt;
==独自ホストにsvgmapAppLayersをコピーして利用==&lt;br /&gt;
[https://github.com/svgmap/svgmapAppLayers svgmapAppLayers]の内容をダウンロードし、独自に用意したホストにコピー（クローン）して利用します。前章のGitHub Pagesの参照であった制限は生じません。&lt;br /&gt;
&lt;br /&gt;
*実際の動作は[https://www.svgmap.org/devinfo/devkddi/tutorials/ghAppLayersClone/ghAppLayers_clone.html こちら]をクリック&lt;br /&gt;
**(このサンプルでは、国交省道路交通情報のレイヤー群と、CSVオーサリングツールレイヤー、basemapsのみを使用しています)&lt;br /&gt;
&lt;br /&gt;
===解説===&lt;br /&gt;
* '''詳細は、 [[独自ホストにsvgmapAppLayersをコピーして利用]]を参照。''' &lt;br /&gt;
&lt;br /&gt;
====あらすじ====&lt;br /&gt;
* https://github.com/svgmap/svgmapAppLayers をダウンロード（git cloneでも良い）する&lt;br /&gt;
** [https://github.com/svgmap/svgmapAppLayers/archive/refs/heads/main.zip zipダウンロードする場合] (解凍必要)&lt;br /&gt;
** git cloneの場合：　&amp;lt;code&amp;gt;git clone git@github.com:svgmap/svgmapAppLayers.git&amp;lt;/code&amp;gt;&lt;br /&gt;
* 自身が運営しているホストに内容をコピーする&lt;br /&gt;
* Container.svgを編集し、掲載したいレイヤーを選択する&lt;br /&gt;
* 必要に応じてプロキシーを構築する&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2388</id>
		<title>リンク集</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2388"/>
		<updated>2026-01-08T03:12:06Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* メディア掲載記事 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==メディア掲載記事==&lt;br /&gt;
*[https://news.mynavi.jp/article/20240621-2970589/ 「SVGMap」とは？ ハイパーレイヤリングを使った災害情報表示システム] : 基本設計理念の解説記事 (2024年6月)&lt;br /&gt;
*[https://tech-note.kddi.com/n/nfa49e1f8d10e 災害情報が「1枚の地図」に集まらない本当の理由 - KDDIが20年以上育ててきたハイパーレイヤリングという答え]&lt;br /&gt;
&lt;br /&gt;
==スライド動画==&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/index_HLA_breakout.html W3C TPAC2025 ハイパーレイヤリングアーキテクチャ ブレークアウトセッション]&lt;br /&gt;
*[https://svgmap.org/movie/AC2024/ W3C AC2024 防災×WWW / SVGMap セッション]&lt;br /&gt;
&lt;br /&gt;
==解説音声==&lt;br /&gt;
*[https://svgmap.org/movie/address/ ハイパーレイヤリングアーキテクチャについて]&lt;br /&gt;
*[https://svgmap.org/movie/address/LaWA.html Layers as Web Apps (LaWA)について]&lt;br /&gt;
&lt;br /&gt;
==Slides==&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/crs-and-svg SVGにおける、(地理)空間参照系(CRS(Coordinate Reference System))]&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/tiling-51301496 SVGMapのタイリングアーキテクチャ]&lt;br /&gt;
*[https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-for-web-mapping-in-japanese タイリングアーキテクチャ詳細解説]&lt;br /&gt;
*SVGMapのLevel of Detail(縮尺に応じたコンテンツ制御)アーキテクチャ&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-ofdetail Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-of-detail-2 Part2]&lt;br /&gt;
*SVGMap全体のプレゼン資料&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20110311-takagi Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20120525-takagi Part2]&lt;br /&gt;
**[https://github.com/satakagi/TPAC2019-docs/blob/master/MAP.md W3C TPAC2019 MapCG slide]&lt;br /&gt;
* [https://satakagi.github.io/mapsForWebWS2020-docs/imgs/W3C%20TPAC2022%20Maps4HTMLtalk%20Satakagi.html W3C TPAC2022 Maps4HTML meeting talk - slide]&lt;br /&gt;
** [https://svgmap.org/slides/W3C%20TPAC2022%20Maps4HTMLtalk(JP).pdf 日本語版・増補版]&lt;br /&gt;
&lt;br /&gt;
==Demos==&lt;br /&gt;
*[https://svgmap.org/ svgmap.orgホームページで案内されています]&lt;br /&gt;
&lt;br /&gt;
==goSVG技術解説書(SVGMapの旧称)==&lt;br /&gt;
* gコンテンツ流通推進協議会(オリジナル:ドメイン廃止：リンク切れ) &amp;lt;!-- https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf --&amp;gt;&lt;br /&gt;
* [https://web.archive.org/web/20071012194715/https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf Internet Archive ミラー]&lt;br /&gt;
&lt;br /&gt;
==JIS規格 (X 7197：2012)==&lt;br /&gt;
*[http://kikakurui.com/x7/X7197-2012-01.html SVGMapのJIS規格書のhtml版(kikakurui.com)] &lt;br /&gt;
*[https://webdesk.jsa.or.jp/books/W11M0090/index/?bunsyo_id=JIS+X+7197%3A2012 同日本規格協会の規格書プレビュー＆購入ページ]&lt;br /&gt;
*SVGにおける地図の表現及びサービスJIS原案の概要（gコンテンツ流通推進協議会:ドメイン廃止:リンク切れ) &amp;lt;!-- https://www.g-contents.jp/filedown.php?item1=4&amp;amp;item2=11&amp;amp;page=370&amp;amp;type=1&amp;amp;mode=disp&amp;amp;admin=1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==論文等==&lt;br /&gt;
*[https://satakagi.github.io/mapsForWebWS2020-docs/ mapsForWebWS2020-docs]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/position.html position statement]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html Decentralized Web Mapping]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html Quad Tree Composite Tiling and the standardization of tiling]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/update202110.html Update on SVGMap from Fall 2020 to October 2021]&lt;br /&gt;
&lt;br /&gt;
==W3C Activities==&lt;br /&gt;
*[https://www.w3.org/submissions/2011/04/ Tiling and Layering Module for SVG Member Submission]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/HyperLayeringArchitectureCommunityReport.html Hyper-Layering CG Report on Maps for HTML CG]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/minimalMapModel.html Minimal Map Model CG Report on Maps for HTML CG]&lt;br /&gt;
==[https://discourse.wicg.io/c/web-mapping/22 discourse.wicg.io]==&lt;br /&gt;
*[https://discourse.wicg.io/t/vector-tiling-on-svgmap/3135/6 Vector Tiling on SVGMap]&lt;br /&gt;
&lt;br /&gt;
==[http://svg2.mbsrv.net/devinfo/index.html このサイトの SVGMap関係リソースのインデックス]==&lt;br /&gt;
===[[OpenStreetMapデータからレイヤーを作成する]]===&lt;br /&gt;
===[[クロスオリジンアクセス]]===&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2387</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2387"/>
		<updated>2026-01-08T01:20:46Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 地図スケールの表示 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2386</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2386"/>
		<updated>2026-01-08T01:20:10Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 地図スケールの表示 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;144.813Km&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: styleは任意&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
: 近傍に縦50pxのスケールイメージを設置するとわかりやすいでしょう&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2385</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2385"/>
		<updated>2026-01-08T01:17:27Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 追加・拡張された機能： */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図スケールの表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;vScale&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;black&amp;quot; style=&amp;quot;left: 5px; bottom: 28px; position: absolute;&amp;quot;&amp;gt;144.813Km&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
: 縦50pxに対応したスケール[Km]を表示します&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2384</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2384"/>
		<updated>2026-01-08T01:14:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 本解説書でAPIを説明している、現在利用可能な拡張フレームワーク */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2383</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2383"/>
		<updated>2026-01-08T01:13:43Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* その他、各種の拡張フレームワークのjavascriptコードを読み込むscript要素(必要に応じて) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2382</id>
		<title>解説書</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E8%A7%A3%E8%AA%AC%E6%9B%B8&amp;diff=2382"/>
		<updated>2026-01-08T01:10:35Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* LayerUIフレームワークを実装したjavascriptコードを読み込むscript要素（本フレームワークについては後述） */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SVGMap.js (Level0.1フレームワーク)解説書=&lt;br /&gt;
&lt;br /&gt;
2018年現在のSVGMapのデータ形式、およびそれを実装した初歩的なフレームワーク(SVGMap Level0.1 Revision*)の解説を行います。&lt;br /&gt;
&lt;br /&gt;
==第一章：SVGMapの基本機構と、更新部分==&lt;br /&gt;
&lt;br /&gt;
この章は、JIS化されたSVGMap ([http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197])や、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に対する、近年の開発成果に基づいたSVGMapのアップデートを解説しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://kikakurui.com/x7/X7197-2012-01.html JIS X.7197]もしくは、[https://www.w3.org/Submission/2011/04/ W3C Member Submission]に記載されているように、SVGMapの基本機構は主に以下の機能を　[https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics 汎用的なグラフィイクスデータ記述形式SVG]に拡張することです。&lt;br /&gt;
* [[#地理座標系の処理|地理座標処理]]&lt;br /&gt;
** SVGの座標系と地理座標系との間の関係を記述する globalCoordinateSystems要素&lt;br /&gt;
* タイルピラミッド（タイリングとLevel of Detail）&lt;br /&gt;
** コンテンツを埋め込む[[#要素|image要素、animation要素]]のx,y,width,height属性への追加の振る舞いと、visible-min-zoom, visible-max-zoom属性の追加&lt;br /&gt;
** 詳細は [https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
* 拡張された[[#レイヤー|レイヤー]]&lt;br /&gt;
** ルートコンテナにおけるimage, animation要素の扱い&lt;br /&gt;
** ルートコンテナが埋め込むsvgコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]])の処理&lt;br /&gt;
&lt;br /&gt;
===地理座標系の処理===&lt;br /&gt;
SVG2では地理空間座標を記述するスペック(metadata geospatial coordinate systems)が削除されました。これは、W3C SVG仕様の範囲では単なるメタデータであり、ユーザエージェントの振る舞いに何ら影響を及ぼさないことが理由です。　また、JIS SVGMapにおいては、coordinateReferenceSystem 要素が定義され、それに基づくユーザエージェントの振る舞いが規定されていますが、これは一方でW3Cのスペックではないという課題を持ちます。&lt;br /&gt;
&lt;br /&gt;
これを受けて、現在提案されているSVGMapのデータ仕様では、SVG1.1の段階ですでに標準化と実装が行われたスペックを注意深く活用することにより、JIS SVGMapで規定された地理座標系に関する機能のいくつか（すべてではない）を実現する方法を用いることとしています。（[https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/globalView globalView spec]）&lt;br /&gt;
&lt;br /&gt;
なお、JIS SVGMapのcoordinateReferenceSystem要素もサポートしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====メルカトル図法を含む任意の図法の定義とその合成機能(＞rev16)====&lt;br /&gt;
従来のSVGMapでは、グローバル座標系に緯度経度座標を用いた場合、使用できる図法は[https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%B7%9D%E5%86%86%E7%AD%92%E5%9B%B3%E6%B3%95 PlateCarreeや正距円筒図法]でした。&lt;br /&gt;
&lt;br /&gt;
一方、rev16では[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を含む任意のSVGMapコンテンツ([[#レイヤー|レイヤーsvgコンテンツ]]やサブレイヤー、タイルなど)のglobalCoordinateSystem 要素のtransform属性に、下記のように&amp;quot;mercator&amp;quot;を指定することで、そのコンテンツの座標系がメルカトル図法([https://en.wikipedia.org/wiki/Web_Mercator_projection web mercator])であることを宣言できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;mercator&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
この記述がされたコンテンツのSVGの座標空間はメルカトル図法上のものとなり、この座標系上でのx,y=0,0(左上)は西経180.0度,北緯85.051129度、x,y=1,1(右下)は東経180.0度,南緯85.051129度に対応します。&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法での地図表示=====&lt;br /&gt;
[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]で先述の宣言を行うことで、SVGMap0.1.jsはメルカトル図法で画面上に地図を表示します。このとき、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が参照する各レイヤーはメルカトル図法であっても、それ以外であっても構いません。フレームワーク内でオンザフライの図法変換が実行されます。（逆に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]がPlateCarreeでレイヤーがメルカトルでも同様）&lt;br /&gt;
&lt;br /&gt;
=====メルカトル図法のドキュメントルート要素のviewBox属性=====&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]において、地図の初期表示状態を記述するドキュメントルート要素(&amp;lt;svg&amp;gt;要素)のviewBoxに記述する座標も先述のメルカトル座標系で記述する必要があります。&lt;br /&gt;
* 一方、緯度経度で初期表示領域を記述したい場合に対応する仕様が拡張されており、その記述例は下記のとおり、'''global'''を追加します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;svg viewBox=&amp;quot;global,138,35,2,2&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====プロキシの設定=====&lt;br /&gt;
オンザフライでの図法変換では、多くのケースで非線形の座標変換が必要となります。ビットイメージ（タイルを含む）に対して子の座標変換を実行するためにSVGMap.jsではビット委イメージのピクセルにアクセスしています。これを実現するにはビットイメージがSVGMap.jsと同一オリジンにある必要があります。この条件を満たせないケースに対してフレームワークにはプロキシを設定する機能があります。([[#setProxyURLFactory|setProxyURLFactory API]]を参照)&lt;br /&gt;
&lt;br /&gt;
'''[[クロスオリジンアクセス|詳細な情報をこちらに掲載しました]]'''&lt;br /&gt;
&lt;br /&gt;
=====多様な図法の定義と利用=====&lt;br /&gt;
[[#動的な地図レイヤー|javascriptコード]]に記載されたscript要素内に定義した関数の関数名をglobalCoordinateSystem要素のtransform属性に記述することで、その関数を図法変換に用いた図法定義が可能となります。(先述のmercator属性は、フレームワークに特別に組み込まれた関数です）&lt;br /&gt;
&lt;br /&gt;
たとえば、日本の平面直角座標系の地図(固有の基準点を持つ横メルカトル図法)をPlateCarreeやメルカトル図法の地図として合成・表示するケースなどに有効でしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ユーザが定義できるこの関数は引数を持たない関数であり、返り値として以下の３つの関数を返す必要があります。&lt;br /&gt;
* {x,y} transform({x,y}) : グローバル座標(WGS84経度緯度)から、そのコンテンツの図法の座標への変換関数 入出力値は.x,.yメンバを持つオブジェクト。&lt;br /&gt;
* {x,y} inverse({x,y}) : 同、逆変換関数&lt;br /&gt;
* number get scale : グローバル座標系に対するコンテンツの図法の座標系の座標値のスケール（グローバル座標系で1変化すると、コンテンツの座標系でいくつ変化するのかを表す）&lt;br /&gt;
* 記述例&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;svg ...&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
  function azimuthalEquidistant(){&lt;br /&gt;
    ...&lt;br /&gt;
    return{&lt;br /&gt;
      transform:function(inp){&lt;br /&gt;
        var xy = transform_int(inp.y, inp.x, ...);&lt;br /&gt;
        return{ x:xy.x, y:xy.y}&lt;br /&gt;
      },&lt;br /&gt;
      inverse:function(inp){&lt;br /&gt;
        var latLng = inverse_int(inp.x, inp.y, ...);&lt;br /&gt;
        return{ x:latLng.lng, y:latLng.lat }&lt;br /&gt;
      },&lt;br /&gt;
      scale: 1.0&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;globalCoordinateSystem srsName=&amp;quot;http://purl.org/crs/84&amp;quot; transform=&amp;quot;azimuthalEquidistant&amp;quot; /&amp;gt;&lt;br /&gt;
  ...map contents in projected coordinate system...&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング===&lt;br /&gt;
SVG2(SVG1.1 2nd Edition)では、SVG単独によるユーザエージェントという実装想定は撤廃され、よく知られているウェブブラウザの機能の一部としてのSVGデータの描画機能、HTMLやCSSと一体化されたデータ・コンテンツ　へと変化しました。一方、近代のウェブブラウザにおけるコンテンツでは古典的なhtmlに基づくコンテンツデータに対して、javascriptとDOM APIによるプログラムでコンテンツをブラウザ上で動的に生成する（ウェブアプリケーション）機構を備えます。すなわちSVGを実装する現代のユーザエージェントは例外なくウェブアプリケーションの実行が可能となりました。&lt;br /&gt;
&lt;br /&gt;
そこで、SVGMapでは静的なSVGによる地図コンテンツに加え javascriptで動的に生成されるコンテンツ(ウェブアプリケーション)も地図コンテンツ（地図のレイヤー）として扱えることとしました。それにもかかわらず SVGMapは依然として複数のウェブ上で分散する地図データを一つの画面上にレイヤリングする機能（ハイパーレイヤリング）を維持しています。すなわち、ウェブアプリケーションとしての地図レイヤーをレイヤリング（マッシュアップ）する機能が拡張されます。これは、SVGMapのマッシュアップ・ハイパーレイヤリングの概念を、単に地図画像データのレイヤリングから、地図上に表現された動的なオブジェクトのマッシュアップ・レイヤリングに広げています。SVGMapではこのコンセプトを[[リンク集#.E8.A7.A3.E8.AA.AC.E9.9F.B3.E5.A3.B0|&amp;quot;Layers as WebApps&amp;quot;(LaWA : ウェブアプリケーションとしてのレイヤー)]]と呼んでいます。&lt;br /&gt;
&lt;br /&gt;
このようなウェブアプリケーションは、レイヤーごとにカプセル化されることになります。これにより、'''グローバル空間'''(コンテナsvgコンテンツとそれを起動する、svgMap.jsフレームワークを読み込んだウェブページ)のスパゲッティ化なしに、多様な機能を実装していくことが可能になります。&lt;br /&gt;
&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html こちらの論文]も参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ウェブアプリケーションによる地図レイヤーを構築するには二つの方法があります。&lt;br /&gt;
* svg要素の'''data-controller'''属性で参照されたhtml文書&lt;br /&gt;
** [[#レイヤー固有ユーザインターフェース]]と呼ばれる機構です。この方法を用いること推奨します。&lt;br /&gt;
* svg要素内の'''script'''子要素 (将来廃止予定)&lt;br /&gt;
** htmlによるUIを伴わない実装の場合はscript要素を用いることができます。ただしsrcは属性には非対応、直接コードを埋め込む必要があります。&lt;br /&gt;
&lt;br /&gt;
この機能を用いるにはSVGMapLevel0.1フレームワークを使用する場合は、拡張フレームワーク(SVGMapLv0.1_LayerUI2_r*.js)を更にロードする必要があります。SVGMapLevel0.2フレームワークの場合はデフォルトで機能します。&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有ユーザインターフェース====&lt;br /&gt;
SVGMap.jsではさらに、個々の地図レイヤー(レイヤーSVGコンテンツ)がそれぞれのレイヤーに特化した固有の演算ロジックだけでなく、ユーザーインターフェースも備えた[[#レイヤーsvgコンテンツの設定|HTMLを紐づける]]ことができる機能が拡張されています。UIも備えた より完全なwebAppをレイヤーとして実装できるため、カプセル化がより効果的に実現されます。&lt;br /&gt;
&lt;br /&gt;
たとえば気象情報のレイヤーに対して気象情報の時間変化を表示するアニメーションのコントローラ(スライダーバー)や、気象情報の種類を選択するプルダウンメニュー　などのUIやロジックを任意に構築できます。&lt;br /&gt;
&lt;br /&gt;
レイヤー固有ユーザーインターフェースは、[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]](SVGMap.jsをロードしたhtml)のレイヤー選択UIを通してwindowに設置されたiframe中に呼び出されます。詳細は&lt;br /&gt;
[[#レイヤー固有のUI]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
このフレームワークでは、[[#svgMapLayerUI.で呼び出せるAPI]]が利用可能です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====例====&lt;br /&gt;
以下に、いくつかのこのような動的な地図コンテンツの例を示しましょう。&lt;br /&gt;
;検索によって表示スタイルを変更する機能を持ったレイヤー&lt;br /&gt;
: 例えばコンビニエンスストアのＰＯＩレイヤーを表示したとして、そのメタデータを読み取り、検索条件に基づいて（例えば深夜営業している店舗）の表示スタイルを変更するような検索機能を実装したレイヤー　メタデータは書くレイヤーごとに独特の値を持つため、その検索ロジックはレイヤーに固有のものとなることがあります。このケースではそのような機能をレイヤーに組み込むことを可能にします。&lt;br /&gt;
;CSVデータなどのレガシーな非SVGデータをHXRで取得し、ブラウザ上でSVG DOMツリーを生成するようなSVG地図コンテンツ。&lt;br /&gt;
: このケースでは、サーバからクライアントに送信されるデータの実体はSVG形式の地図データではなく、CSVなどのレガシーなデータです。SVG地図コンテンツには、CSVデータをSVGとして描画するためのデータ読み込み・解読・SVG DOMツリー生成機構を備えたjavascriptコードが含まれます。また、これよりはモダンなgeoJsonやKML等のデータをSVG DOMに変換することも容易に可能でしょう。これをより簡単に実現するためのライブラリも[[#svgMapGIStool.で呼び出せるAPI|svgMapGIStool]]に準備されています。&lt;br /&gt;
;タイリングされた地図コンテンツ&lt;br /&gt;
: それは、たとえば[https://wiki.openstreetmap.org/wiki/Tiles OpenStreepMapのTile Server]や、[https://en.wikipedia.org/wiki/Tile_Map_ServiceTileMap Tile Map Service]のような、特定のロジックによる数列のような法則性を持ったピラミッド状の地図タイルリソースをタイリングする地図コンテンツのことです。&lt;br /&gt;
: 更新されたSVGMapでは、地図コンテンツに内蔵されたjavascriptによるアプリケーションロジックとしてそれらを取り扱うことができます。タイリング規則をそのままウェブアプリケーションとしてで書き下し、スケールやビューポートに応じて適切なタイリング(配置)を行うSVG DOMツリーを生成するSVG地図コンテンツが構築できます。&lt;br /&gt;
&lt;br /&gt;
=====タイリングに関するノート=====&lt;br /&gt;
[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html svgMapにおけるタイリング]は従来の地図フレームワークより柔軟で汎用的な概念に基づいています。&lt;br /&gt;
openLayersやleafletなどの従来の地図フレームワークでは、このようなタイリング機能は特定の固定的なタイリングロジックとパラメータを伴った機能として地図フレームワーク本体にハードコードされて提供されてきました。さらには地図フレームワークがこれらのタイリングロジックに強く依存したアーキテクチャを持っていました。一方、これらのロジックにはさまざまなバリエーションや最適化のための調整パラメータが存在し、これまで長らくその互換性や相互運用、更には効率の問題を抱えてきました。次のリンクでその多くの議論や多様な提案を参照できるでしょう。[https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification TMSspecs@osgeowiki], [https://wiki.osgeo.org/wiki/Category:Tiling tiling@osgeowiki]&lt;br /&gt;
ベクターデータのタイリングにおいては、これらの課題はさらに増幅され、いまだ手法は確立していないといっても良いでしょう。たとえば、我々の研究では、Quad Tree Composite Tiling([https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-in-english スライド]、、[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html ペーパー])のような用途によってはもっと優れたタイリングの手法も見いだされています。&lt;br /&gt;
&lt;br /&gt;
一方、これらのロジックはその多様なバリエーションを含め、javascriptによるプログラムコードとしては容易に記述可能です。多くの場合わずか数十行のロジックで記述できるでしょう。この程度のコードで多くのタイリングの手法が包含できるのであれば、特定のタイリング手法をフレームワークのコアに内包する・さらにはこれら特定のタイリングの手法にコアが依存する必要はなく、先述のウェブアプリケーションによる動的な地図レイヤーとして実装すれば良いであろうというのがSVGMapにおけるタイリング扱いです。3DマップのフレームワークであるCesiumはこれに似たタイリングポリシーを持っているようです。&lt;br /&gt;
&lt;br /&gt;
=====SVG以外のデータサポートに関するノート=====&lt;br /&gt;
前章に記載した方針と同様、他の地図表示フレームワークと異なりSVGMapではSVGとして規定されたコンテンツ(もちろんビットイメージの埋め込みは可能)以外のネイティブサポートは行いません。例えばgeoJsonやKML, WKTなど地図業界でしばしば用いられるデータをSVGMapで表示したい場合は、変換ルーチンを埋め込んだ動的な地図コンテンツ（webAppレイヤー）としてそれらを扱います。SVGMap.jsの拡張モジュールである[[#svgMapGIStool.で呼び出せるAPI|SVGMapGIS.js]]には、これらのデータをwebAppsで読み込みSVGに変換するためのAPIがあります。&lt;br /&gt;
&lt;br /&gt;
===トポロジースイート(地理空間情報処理)===&lt;br /&gt;
Rev.13で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 13以降では、SVGMapコンテンツに対してトポロジー演算機能(地理空間情報処理機能)を適用する拡張フレームワークが提供されます。この機能を用いるにはSVGMapLevel0.1フレームワークに加えて、拡張フレームワーク(SVGMapLv0.1_GIS_r*.js)をロードする必要があります。 このフレームワークでは、[[#svgMapGIStool.で呼び出せるAPI|拡張されたAPI]]が利用可能です。 フレームワークに内蔵された基本的な演算機能に加え、geoJSONと整合するインターフェースを備え、[https://github.com/bjornharrtell/jsts jsts]を組み込み、より高度な機能を実装するための機構も持ちます。&lt;br /&gt;
&lt;br /&gt;
この機能を用いると、特定のレイヤーに登録されているポリゴンの範囲に入っている、特定のレイヤーのポイントをフィルタリングして表示の色を変更する。といったことが可能です。ただし、これらはすべてすでにブラウザ上にロードされている限られた量のコンテンツの中での演算に限定されます。もしもサーバ上にしかないデータに対してこれらの演算を試みたい場合、従来通りサーバサイド技術によってそれは実現すべきです。&lt;br /&gt;
&lt;br /&gt;
また、主題情報を含むウェブマップコンテンツの多くのレイヤーがラスタータイルによって提供されているという現状を考慮し、このスイートはラスターレイヤーをカバレッジとして扱った空間情報処理を行う機能の実装も進められています。現在のところ、カバレッジとポイントとの間での演算が可能です。また、そのために便利なカラーピッカー等の付加的な機能の実装も進められています。&lt;br /&gt;
&lt;br /&gt;
===オーサリングシステム===&lt;br /&gt;
Rev.14で拡張&lt;br /&gt;
&lt;br /&gt;
SVGMapLevel0.1 Revision 14以降では、SVGMapコンテンツを編集するツール機能が実装された拡張フレームワークが提供されます。[[#svgMapAuthoringTool.で呼び出せるAPI|フレームワークが提供するAPI]]を使って、オーサリング機能を持ったレイヤーを作ることが可能です。コンテンツは、SVG DOMとして構築されます。なお編集したオブジェクトを保存したり登録するためには別のサービスやアプリケーションの開発が必要です。&lt;br /&gt;
&lt;br /&gt;
===3D可視化システム===&lt;br /&gt;
Rev.15で拡張&lt;br /&gt;
&lt;br /&gt;
[https://cesiumjs.org/ Cesium.js]を用いて、SVGMap.jsが表示できるすべてのコンテンツを3D可視化するシステムです。詳細解説はTBD ([[#svgMapCesiumWrapper.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===プログレッシブウェブアプリケーション===&lt;br /&gt;
Rev.16で拡張&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/docs/Web/Progressive_web_apps Progressive Web Apps]をサポートしたブラウザにおいて、SVGMap.jsをオフラインでも利用可能にする拡張機能です。詳細解説はTBD ([[#svgMapPWA.で呼び出せるAPI|フレームワークが提供するAPI]])&lt;br /&gt;
&lt;br /&gt;
===SVGMapコンテンツのバックエンドソフトウェア (参考)===&lt;br /&gt;
本解説書は主にコンテンツ形式とユーザーエージェント側のソフトウェアについて解説していますが、サーバ・バックエンド側についてもここで少し言及します。&lt;br /&gt;
&lt;br /&gt;
shapefileやcsvなどから、静的なSVGMapコンテンツを生成するためのソフトウェアが[https://github.com/svgmap/svgMapTools オープンソース]で準備されています。これらのソフトウェアでは、[[#タイリングに関するノート|高度なタイリング手法]]を用いた地図タイルを生成することができます。使用方法などは同リポジトリに用意されているチュートリアルを参照してください。&lt;br /&gt;
&lt;br /&gt;
一方、もちろんSVGMapの仕様に準拠すれば、これらのソフトウェアに頼らず、自由にバックエンドを構築することができます。例えばよく知られた地図タイルサービスを用いたり、古典的な[https://wiki.openstreetmap.org/wiki/Web_feature_service WFS ]や[https://wiki.openstreetmap.org/wiki/WMS WMS]のような動的地図・地理空間情報サービスをベースにして比較的容易にそれらを構築することもできます。[https://github.com/svgmap/svgMapLv0.1/tree/master/appLayers SVGMap.jsのリポジトリのappLayersディレクトリ]にはそのようなシステムを構築する際のフロントエンド側の動的レイヤーのサンプルが掲載されています。&lt;br /&gt;
&lt;br /&gt;
==第二章：SVGMap Revsion 0.1フレームワーク==&lt;br /&gt;
SVGMapは究極的には既存のすべてのウェブブラウザがネイティブの機能としてそれを備えることを目標とし、既存のHTML,CSS,SVGなどのウェブブラウザの標準規格との整合性を備え、且つ既存のWeb Mappingの規格との整合性をも備えた仕様として検討と標準化を進めています。しかし今のところまだその標準化は完遂されていないため、その完全な実装がなされたウェブブラウザは存在しません。一方、既存のウェブブザでSVGMapの機能が実行可能となるような拡張をJavascriptによるフレームワークとして構築することが可能です。SVGMap Revision 0.1フレームワークは、このようなJavascriptによるSVGMapの仕様に基づいた初歩的な制限と拡張がされた実装です。その実装はオープンソースとして[https://github.com/svgmap/svgMapLv0.1 こちらのgitubリポジトリ]で公開されています。&lt;br /&gt;
&lt;br /&gt;
そのアーキテクチャの特徴は、ブラウザネイティブのSVGレンダラーを使用せず、HTML,CSS,HTMLCanvas2DAPIを用いてSVGMapが実装されている点です。この特徴は主にこのフレームワークの開発が開始された時期に起因しています。当時のウェブブラウザの多くはSVGが実装されていませんでした。また実装されていたとしても、大規模なベクトルデータのレンダリング、および伸縮スクロール・インタラクティブな操作に対する性能面での処理制御に問題がありました。これらの問題のいくつかは現在のブラウザで解消されているものがあるかもしれません。またこれらの問題の解決とともに、SVGMapフレームワークはLevel番号を上げつつよりネイティブの機能に基づいた実装に移行するかもしれません。&amp;lt;font size=&amp;quot;-2&amp;quot;&amp;gt;参考までに、[http://svg2.mbsrv.net/devinfo/devkddi/lvl0.5/ 実験的なネイティブのレンダラを用いた実装(2010年)]があります。&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SVGのベクトル描画機能は[https://github.com/canvg/canvg canvg]のpathパーサなどを引用することで実装されています。一方、地図としてあまり用いられないと想定された 多くの要素やプロパティ、アトリビュートの実装が省略されています。&lt;br /&gt;
&lt;br /&gt;
===追加・拡張された機能：===&lt;br /&gt;
====フレームワークの呼び出し====&lt;br /&gt;
本フレームワークを用いる場合、SVGMapコンテンツをブラウザに直接読み込ませることはできません。フレームワークを動作させるjavascriptライブラリをロードしたhtmlコンテンツ(WebApps)を準備し、そこでSVGMapコンテンツを読み込み表示させます。利用者には、このhtmlコンテンツのURLを告知します。このhtmlコンテンツを以降'''ルートhtml文書'''と呼ぶことにします。&lt;br /&gt;
&lt;br /&gt;
SVGMapのフレームワークはgithubリポジトリ：https://github.com/svgmap/svgmapjs　で公開されています。&lt;br /&gt;
&lt;br /&gt;
htmlコンテンツの&amp;lt;body&amp;gt;要素直下に以下の要素を配置します。&lt;br /&gt;
=====フレームワークを実装したjavascriptライブラリを読み込むscript要素=====&lt;br /&gt;
これがSVGMap.jsのコアのフレームワークを構成します。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
=====レイヤーリストを実装した拡張フレームワークのjavascriptコードを読み込むscript要素=====&lt;br /&gt;
拡張フレームワークですが、SVGMap.jsの多くの機能はこれに依存しているので、基本的には導入が必要です。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_LayerUI2_r*.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:r*は、フレームワークのリビジョンによって変化する&lt;br /&gt;
&lt;br /&gt;
===== cdn(jsdelivr)から読み込む例 =====&lt;br /&gt;
[https://github.com/jsdelivr/jsdelivr jsdelivr]の[https://www.jsdelivr.com/?docs=gh 機能]を用いて、[https://github.com/svgmap/svgMapLv0.1 SVGMap.jaのgithubリポジトリ]から直接読み込む場合は以下のようにします。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_r17.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== rev18 (ECMA Script Module版)の例 =====&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上のスクリプトで必要なモジュールが読み込まれます。[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のwindowのメンバには、svgMapオブジェクトを設定しています。&lt;br /&gt;
&lt;br /&gt;
[https://svgmap.org/devinfo/devkddi/tutorials/tutorial5_esm/tutorial5.html 実働サンプル(tutorial5_esm)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もしくは https://github.com/svgmap/svgmapjs の内容を独自のウェブホストにコピーしそれを用いることもできます。(下の例は[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]のhtmlに対して、svgmapサブディレクトリにjsを置いた場合)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from './svgmapjs/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== GISモジュールを利用する場合 =====&lt;br /&gt;
svgMap.jsの地理空間演算機能(GISモジュール)では、jsts.jsを使用しています。そのためGISモジュールを機能させるにはjsts.jsの読み込みが必要です。下記のようになります。もちろん独自のウェブホストにjstsをコピーしてそれを利用することも可能です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://unpkg.com/jsts@1.6.1/dist/jsts.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&lt;br /&gt;
  import { svgMap } from 'https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/SVGMapLv0.1_r18module.js';&lt;br /&gt;
  window.svgMap=svgMap&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====その他、各種の拡張フレームワークのjavascriptコードを読み込むscript要素(必要に応じて)=====&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
&lt;br /&gt;
SVGMapLv0.1_Authoring_r*.js、SVGMapLv0.1_GIS_r*.js他がある。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;拡張フレームワークファイル.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 注記:拡張フレームワークファイル.jsは用いる拡張によって変化する。&lt;br /&gt;
======本解説書でAPIを説明している、現在利用可能な拡張フレームワーク======&lt;br /&gt;
ECMA Script Module対応の内容に現在更新中&lt;br /&gt;
* [[#svgMapAuthoringTool.で呼び出せるAPI|SVGMapLv0.1_Authoring_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_Authoring_r7.js&lt;br /&gt;
* [[#svgMapGIStool.で呼び出せるAPI|SVGMapLv0.1_GIS_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_GIS_r3.js&lt;br /&gt;
* [[#svgMapLayerUI.で呼び出せるAPI|SVGMapLv0.1_LayerUI2_r*.js]]&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/SVGMapLv0.1_LayerUI2_r4.js&lt;br /&gt;
* [[#svgMapCesiumWrapper.で呼び出せるAPI|SVGMapLv0.1_CesiumWrapper_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/Cesium3D/SVGMapLv0.1_CesiumWrapper_r3.js&lt;br /&gt;
* [[#svgMapPWA.で呼び出せるAPI|SVGMapLv0.1_PWA_r*.js]] (実験的)&lt;br /&gt;
** https://cdn.jsdelivr.net/gh/svgmap/svgMapLv0.1@latest/experimental/PWA/SVGMapLv0.1_PWA_r5.js&lt;br /&gt;
&lt;br /&gt;
まだ実験的なsvgMapCesiumWrapperは、[http://www.svgmap.org/devinfo/devkddi/lvl0.1/cesiumSvgMap/top.html svgMap cesium visualizer]ページを参照ください。&lt;br /&gt;
SVGMapPWA(ProgressiveWebApp)については、[https://svgmap.org/devinfo/devkddi/lvl0.1/svgMapPWA/ SVGMap PWA Test]ページを参照ください。&lt;br /&gt;
&lt;br /&gt;
=====SVGMapコンテンツを配置するためのdiv要素=====&lt;br /&gt;
id属性に&amp;quot;mapcanvas&amp;quot;を設定し、data-src属性(もしくはtitle属性(to be obsoluted))には、地図フレームワークが最初に読み込む、SVGMap.jsが表示する地図コンテンツの起点となるSVGコンテンツ（以降'''コンテナsvgコンテンツ'''と呼びます）のパスを指定したdiv要素を設置します。&lt;br /&gt;
&lt;br /&gt;
コンテナsvgコンテンツはまた、'''[[#レイヤー|ここで記述するレイヤー]]'''を持つことができる特別のコンテンツです。&lt;br /&gt;
&lt;br /&gt;
（要確認：地図のサイズ・配置はこのdiv要素のサイズとなります。無指定の場合は全ウィンドサイズ）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; title=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======差分データの指定======&lt;br /&gt;
data-custom-layers-root属性でContainer.svgに対するレイヤーの差分情報のパスを指定することができます。&lt;br /&gt;
もしくは、data-custom-layers-root属性に、レイヤーの差分情報が保管されているディレクトリを記述した場合、URLハッシュで差分ファイルを指定することもできます。&lt;br /&gt;
差分データは、[https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]で作成することが可能。（データ形式は後述）&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;mapcanvas&amp;quot; data-src=&amp;quot;Container.svg&amp;quot; data-custom-layers-root=&amp;quot;./containerDif/dif0.json&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====地図中心の照準イメージ。=====&lt;br /&gt;
参照する画像はあらかじめ用意されたもの以外も利用できます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;centerSight&amp;quot; style=&amp;quot;opacity:0.5&amp;quot; src=&amp;quot;Xcursor.png&amp;quot; width=&amp;quot;15&amp;quot; height=&amp;quot;15&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====任意で設置できる要素：====&lt;br /&gt;
=====伸縮ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomupButton&amp;quot; style=&amp;quot;left: 5px; top: 5px; position: absolute;&amp;quot; src=&amp;quot;zoomup.png&amp;quot; onclick=&amp;quot;svgMap.zoomup()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;zoomdownButton&amp;quot; style=&amp;quot;left: 5px; top: 25px; position: absolute;&amp;quot; src=&amp;quot;zoomdown.png&amp;quot; onclick=&amp;quot;svgMap.zoomdown()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。&lt;br /&gt;
　伸縮ボタンを一回押すたびに伸縮する比率は、別途svgMap.setZoomRatio(ratio)で設定可能。&lt;br /&gt;
　デフォルトの比率はsqrt(3)&lt;br /&gt;
　&lt;br /&gt;
=====測位ボタン=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;img id=&amp;quot;gpsButton&amp;quot; style=&amp;quot;left: 5px; top: 45px; position: absolute;&amp;quot; src=&amp;quot;gps.png&amp;quot; onclick=&amp;quot;svgMap.gps()&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: img要素かつidが上記の値である必要があります。ボタン押下で測位し、測位点を中心にして地図を表示する機能。表示の範囲は測位制度に応じて適当に設置されます。&lt;br /&gt;
&lt;br /&gt;
=====グローバルメッセージ=====&lt;br /&gt;
レイヤー固有UIが任意のメッセージを出力可能にするために設置するエリア　[[#レイヤー固有のUI]]のAPI '''putGlobalMessage''' 参照&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span id=&amp;quot;globalMessage&amp;quot; style=&amp;quot;font-size:10px;left:5px;bottom:16px;position:absolute;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====地図中心の緯度経度値表示=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;font id=&amp;quot;centerPos&amp;quot; size=&amp;quot;-2&amp;quot; color=&amp;quot;brown&amp;quot; style=&amp;quot;left: 50px; bottom: 5px; position: absolute;&amp;quot; &amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の値である必要があります。&lt;br /&gt;
　styleは任意&lt;br /&gt;
&lt;br /&gt;
=====[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]](後述)を設置するdiv要素=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerList&amp;quot; style=&amp;quot;left :30px; top: 10px; width:300px;height:90%; position: absolute; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。&lt;br /&gt;
　  styleは任意だが、heightは[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]が展開された状態におけるサイズとなります。格納された状態のサイズは、この要素における文字の縦幅となります。各種オプションについては[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|詳細を参照ください]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====[[#レイヤー固有のUI|レイヤー固有のUI]](後述)を設置するdiv要素=====&lt;br /&gt;
[[#レイヤー固有のUI|レイヤー固有のUI]]を使用するために設置するdiv要素です。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div id=&amp;quot;layerSpecificUI&amp;quot; style=&amp;quot;right :10px; top: 40px; width:400px;height:400px; position: absolute; background-color: white;opacity:0.8;display:none;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: idが上記の通りである必要があります。styleは任意だが、heightはレイヤリストUIが展開され得る最大のサイズとなります。&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
=====レジューム機能のためのチェックボックス=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;form style=&amp;quot;right:10px;top:20px;position:absolute;opacity:0.8&amp;quot; &amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;input type=&amp;quot;checkBox&amp;quot; id=&amp;quot;resumeBox&amp;quot; onChange=&amp;quot;svgMap.resumeToggle(event)&amp;quot; autocomplete=&amp;quot;off&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;label for=&amp;quot;resumeBox&amp;quot;/&amp;gt;Keep and Resume view&amp;lt;/label&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: checkboxタイプのform要素であり、idが上記の通りである必要があります。レジューム機能とは、(rev16以前ではcookie、rev17以降ではlocalStorage)を用いて、前回最後に表示された状態（レイヤーの表示非表示状態、表示領域（view port）を再現する機能です。スタイルおよびlabel要素は任意&lt;br /&gt;
&lt;br /&gt;
===== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]のためのスタイル=====&lt;br /&gt;
 &amp;lt;style&amp;gt;&lt;br /&gt;
 body {&lt;br /&gt;
 	font-family: Meiryo;&lt;br /&gt;
 }&lt;br /&gt;
 #layerTable{&lt;br /&gt;
 	background:#ffE0E0;&lt;br /&gt;
 	border: 2px solid #bbb;&lt;br /&gt;
 }&lt;br /&gt;
 .layerItem{&lt;br /&gt;
 	background-color: white;&lt;br /&gt;
 }&lt;br /&gt;
 .noGroup{&lt;br /&gt;
 	background-color: #fff0f0;&lt;br /&gt;
 }&lt;br /&gt;
 #layerList{&lt;br /&gt;
 	background-color: #ffff80;opacity:0.8;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/style&amp;gt;&lt;br /&gt;
====== [[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.E3.81.AE.E8.A9.B3.E7.B4.B0|レイヤーリストUI]]を用いる場合、例えば上記のようなスタイルの定義が必要です。======&lt;br /&gt;
* layerList：レイヤーリストUI全体に対するスタイル&lt;br /&gt;
* layerTable：レイヤーリストUIの中のテーブルに対するスタイル。&lt;br /&gt;
* layerItem：同テーブルに表示される個々のレイヤー表示に対するスタイル&lt;br /&gt;
* noGroup：同レイヤー表示のうち、グループに属さないレイヤーに対するスタイル&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
====レイヤー====&lt;br /&gt;
SVGMapは古典的な地図情報システムのようなレイヤーの概念を備えていません。一方その上位概念ともみなせる、任意のドキュメントをツリー状に埋め込む機能を備えています。しかしそれでは古典的なユースケースを平易に表現しているとはいえないため、それをラップする古典的なレイヤーの概念と、それに基づくレイヤーユーザインターフェースのフレームワークを持ちます。&lt;br /&gt;
&lt;br /&gt;
フレームワークが最初に読み込む地図コンテンツの起点となる'''[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]'''の中で、animationもしくはiframeを用いて（準拠規格に依る）埋め込まれるsvgコンテンツが、自動的にレイヤーとみなされます。いうまでもなくレイヤーの上下順はSVGコンテンツのスクリプト中での埋め込みの順番の逆順になります。&lt;br /&gt;
&lt;br /&gt;
また、このコンテナsvgコンテンツが参照し埋め込んでいる、各レイヤーのSVGコンテンツのことを、'''[[#レイヤー|レイヤーsvgコンテンツ]]'''と呼ぶこととします。ここで、各[[#レイヤー|レイヤーsvgコンテンツ]]はさらに別のsvgコンテンツを埋め込むことがあります。これらのコンテンツはよくサブレイヤーSVGコンテンツもしくは単にサブレイヤーと呼ばれることもあります。&lt;br /&gt;
&lt;br /&gt;
なお、Rev12以降のSVGMapLv0.1フレームワークではレイヤーフレームワークは本体と独立した実装となり、拡張や切り離しが可能となりました。以下は、標準で提供されるレイヤーフレームワークのVer2 (SVGMapLv0.1_LayerUI2_r*.js)に関して解説します。&lt;br /&gt;
&lt;br /&gt;
レイヤーUIフレームワークが提供するUIは、先述のレイヤーリストUIを設置するdiv要素によって提供されます。このUIは以下の機能を持ちます。&lt;br /&gt;
* 折り畳み可能なレイヤーの一覧を表示する機能&lt;br /&gt;
* 各レイヤーの表示非表示を切り替える機能&lt;br /&gt;
* グルーピングされたレイヤー(後述)をグループとして表現、折り畳み、一括表示非表示する機能。&lt;br /&gt;
* そのレイヤーに紐づけられた[[#レイヤー固有のUI]]を出現させる機能。&lt;br /&gt;
* 表示されているレイヤーの個数などの情報を表示する機能&lt;br /&gt;
&lt;br /&gt;
===== コンテナsvgコンテンツの記述内容とレイヤーフレームワークの振る舞い =====&lt;br /&gt;
* animation要素：　レイヤーとみなされる&lt;br /&gt;
** title属性: レイヤーの名称となる。(必須属性) title属性値は他のレイヤーと重複してはならない(ID(このコンテンツ内でのレイヤーの識別子)として振る舞う)&lt;br /&gt;
** xlink:href属性: レイヤーsvgコンテンツへの参照&lt;br /&gt;
** visibility属性 : レイヤーの初期の表示状態。UIにより変更できる (hidden or visible)&lt;br /&gt;
** opacity属性 : レイヤーの透明度&lt;br /&gt;
** x,y,width,height属性の振る舞いは共通(viewportがこの属性の値とintersectしていただロードされる)&lt;br /&gt;
** class属性: スペース区切りで規定値(複数)と任意値(一つ)を記述できる&lt;br /&gt;
*** 詳細は後述の[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供]]を参照&lt;br /&gt;
** data-controller属性: (Optional) [[#レイヤー固有のUI]]　の　[[#詳細]]参照&lt;br /&gt;
* globalCoordinateSystem要素：(1個つだけ必須要素)&lt;br /&gt;
** (コンテナsvgコンテンツにおける)本要素が、このフレームワークによってUser Agentに表示される地図の図法を規定する。&lt;br /&gt;
*** なお、それ以外のSVGコンテンツのglobalCoordinateSystem要素は、コンテナsvgコンテンツの図法への変換のために用いられる&lt;br /&gt;
*** より詳細は[[#地理座標系の処理]]を参照&lt;br /&gt;
* svg要素: (documentRoot要素)&lt;br /&gt;
** viewBox属性: 初期の表示範囲を指定。&lt;br /&gt;
*** ここに記述する座標値は、SVGの仕様に準ずるが、　拡張記述形式も使用可能　参照：[[#メルカトル図法のドキュメントルート要素のviewBox属性]]&lt;br /&gt;
&lt;br /&gt;
===== レイヤーsvgコンテンツ =====&lt;br /&gt;
レイヤーsvgコンテンツは、[[#レイヤー固有のUI|レイヤー固有のUI]]を紐づけることができます。&lt;br /&gt;
&lt;br /&gt;
====クリッカブルオブジェクト====&lt;br /&gt;
グラフィックスオブジェクトをクリック（タブレットの場合は、タップもしくは照準アイコンに合わせたうえでタップ）することでそれに紐づけられたインタラクティブ動作を実行する。インタラクティブ動作はフレームワークが独自に提供する、metadataフレームワークに基づく、メタデータの表示機能を対象とします。&lt;br /&gt;
&lt;br /&gt;
なお、image要素(useによって間接的に設置されたimage要素を含む)は、a要素によるハイパーリンクが加えて実装されています。metadaとa要素の双方が設定されているimage要素では、どちらのインタラクティビティを発動させるかをモーダルダイアログによるユーザへの問い合わせが行われます。&lt;br /&gt;
&lt;br /&gt;
====class属性によるレイヤーのグルーピング・クリッカブル機能の提供====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)は、class属性によって、各レイヤーに特性を与えることができます。classはスペース区切りで複数指定することができますが、グループ名は一つしか認識されません。&lt;br /&gt;
;グルーピング&lt;br /&gt;
: 以下の属性値以外の値を記述すると、グループ名として認識され、同じグループ名を持ったレイヤーたちをグルーピングすることができます。グルーピングの効果はレイヤーＵＩにおけるグループ表現と、下記のbatch,switch特性です。グループはレイヤーリストUI上の表現に反映されます。最初に現れたグループ名がこのUIの下に表示されます。ただし地図画面上の描画の順番はこれとは別、SVGの基本的な描画順([https://www.w3.org/TR/SVG11/render.html#PaintersModel Painter Model])に準じます。&lt;br /&gt;
;batch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーを一括で表示非表示するための機能がレイヤーＵＩに付加されます。&lt;br /&gt;
;switch&lt;br /&gt;
: グルーピングとともに使用します。そのグループに属するレイヤーは、どれか一つしか表示されません。batchとの併存はできません。（無視されます（要確認））&lt;br /&gt;
;clickable&lt;br /&gt;
: Pathなどのベクトル図形要素はデフォルトではインタラクティビティが提供されません。クラス値にclickableを指定することでこのレイヤー（子供のsvgコンテンツを含む）の図形要素においてのみ、インタラクティビティが提供されます。提供されるインタラクティビティは、マウスによって図形をクリックしたとき、そのグラフィックス要素がクリッカブルな要因を備えているかどうかを検索し、備えている場合それに対応するアクションを起こします。&lt;br /&gt;
　なお、image要素(useによって間接的に設置されたimage要素を含む)は、このクラスの設定に依らず、a要素によるハイパーリンク、およびmetadataフレームワークを用いたクリッカブルオブジェクトとして機能します。&lt;br /&gt;
;editable&lt;br /&gt;
: 当該レイヤの[[#レイヤー固有のUI|レイヤー固有UI]]に[[#svgMapAuthoringTool.で呼び出せるAPI|svgMapAuthoringTool]]の図形編集オブジェクトを設置する場合、それを有効に機能させるためにはこの属性が必要です。(なお再編集機能を有効にするにはclickableも必要)&amp;lt;!--Rev11までのフレームワークにはPOI（defsで定義されたビットイメージをuseで貼り付ける機能）が内蔵されていました。その機能を発動するためのクラスです。なおRev12からはその実装は外されており、今後編集機能は機能拡充されたうえで周辺ライブラリとして提供される予定です。--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====data-nocache====&lt;br /&gt;
コンテナsvgコンテンツが参照するレイヤー（[[#レイヤー|レイヤーsvgコンテンツ]]）へのリンクを記述する要素(animationもしくはiframe要素)に、data-nocache属性をつけることによって、クライアントのコンテンツキャッシュを無効にすることができます。なお、無効化手段はunix-timeクエリパートをそのレイヤー下のすべてのリソースへのアクセスに付加させることによります。&lt;br /&gt;
&lt;br /&gt;
====metadataフレームワーク====&lt;br /&gt;
データ格納効率に優れたメタデータのフレームワークが提供されます。このメタデータは先述のクリッカブルオブジェクトとしてインタラクティビティの実装に用いられます。	svgドキュメントルート要素のproperty属性にメタデータの属性名をカンマ区切りで列挙。同文書の図形要素のproperty属性に同じ順序でメタデータの値を記述します。(なお、xlink:title属性でマウスオーバーで機能する吹き出しを設置できます)&lt;br /&gt;
&lt;br /&gt;
ひとつの文書に対して一つのスキーマ（メタデータの属性名とその順番）しか与えられないという制約を持ちます。（その代わり格納効率が高い）クリックやタッチ等によってデフォルトの状態ではブラウザが備えるモーダルダイアログに属性名と属性値がそれぞれ列挙された形で表示されます。metadata表示機能の拡張/カスタマイズについては、ウェブアプリケーションの開発の章で別途解説する'''setShowPoiProperty()'''関数を参照してください。&lt;br /&gt;
&lt;br /&gt;
データ自体にカンマが含まれる場合はエスケープが必要です。&lt;br /&gt;
&lt;br /&gt;
=====例：=====&lt;br /&gt;
 &amp;lt;svg '''property=&amp;quot;id,type,latitude,longitude,title,address,spec&amp;quot;''' ... &amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;use transform=&amp;quot;ref(svg,14118.37511,-4524.39994)&amp;quot; x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; xlink:href=&amp;quot;#syl8&amp;quot;&lt;br /&gt;
 '''content=&amp;quot;RIS/RJER,地方管理,45.2439994,141.1837511,利尻空港,北海道利尻郡利尻富&lt;br /&gt;
 士町,1800×45(07/25)&amp;quot;''' xlink:title=&amp;quot;利尻空港&amp;quot;/&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;/svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====レイヤーリストUIの詳細====&lt;br /&gt;
[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E3.83.AA.E3.82.B9.E3.83.88UI.28.E5.BE.8C.E8.BF.B0.29.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8Bdiv.E8.A6.81.E7.B4.A0|レイヤーリストUIが設置されるdiv要素]]には、以下のプロパティを設定することで、UIの動作を調整するパラメータを与えることができます&lt;br /&gt;
* data-customizer [https://github.com/svgmap/svgmapjs/blob/main/SVGMapCustomLayersManager_r3module.html カスタムレイヤーマネージャ]の起動ボタンを設置し、プロパティ値で同ウェブアプリのパスを指定します。&lt;br /&gt;
* data-layerstylecontroller 各レイヤーの表示スタイルを調整するUIを設置します(値不要)&lt;br /&gt;
* data-hiddenfilter 表示されていないレイヤーをレイヤーリストUI上でも非表示にする機能を稼働させます(値不要)&lt;br /&gt;
* data-opened svgMapウェブアプリが起動した直後にレイヤーリストが開かれた状態にします&lt;br /&gt;
* data-fixed レイヤーリストが開かれた状態且つ閉じるボタンを表示させません(data-openedと排他)&lt;br /&gt;
&lt;br /&gt;
===動作の制限・差異===&lt;br /&gt;
====再描画の制限====&lt;br /&gt;
* ブラウザネイティブのSVG描画機能に対して注意すべき点として、このSVGDOMの描画は、基本的に伸縮スクロールのタイミングでしか行われない点です。（ネイティブのSVG描画機能は60fpsで再描画する努力を行っている) そのため、再描画タイミングを意識・明示([[#refreshScreen|refreshScreen]]関数を使用)したアプリケーションの構築が必要になるケースがあります。&lt;br /&gt;
*関連情報&lt;br /&gt;
**[[内部機構解説#Zoom.2FPan_Controller:]]&lt;br /&gt;
**[[解説書#refreshScreen|refreshScreen]]&lt;br /&gt;
**[[解説書#setPreRenderController|setPreRenderController]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5API|preRenderFunction ]]&lt;br /&gt;
**[[解説書#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|動的な地図レイヤー]]&lt;br /&gt;
**[[解説書#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
**[[解説書#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|拡張イベント]]&lt;br /&gt;
&lt;br /&gt;
===実装されている機能===&lt;br /&gt;
多くの機能が実装されていないため、実装されている機能、および拡張された機能をここでは列挙することとします。&lt;br /&gt;
====要素====&lt;br /&gt;
*path&lt;br /&gt;
*globalCoordinateSystem&lt;br /&gt;
*circle&lt;br /&gt;
*text&lt;br /&gt;
*defs&lt;br /&gt;
*animation&lt;br /&gt;
** 別のsvgコンテンツを取得して埋め込みます。&lt;br /&gt;
** コンテナsvgコンテンツで使用した場合は埋め込んだコンテンツは「レイヤー」と見做されます。&lt;br /&gt;
** それ以外で使用した場合はタイルやサブレイヤーとして使用できます。&lt;br /&gt;
** x,y,width,height属性は、SVGの仕様に基づき埋め込むコンテンツのtransformに影響を与えるとともに、下記の通り動的なコンテンツの読み込み機構が制御されます。&lt;br /&gt;
*** この属性で示された領域がtransform後のviewportと交差・包含した場合、その埋め込みコンテンツは動的に取得され表示されます。lazy loadの機構に相当し、タイリングメカニズムを構成します。&lt;br /&gt;
*** ただし、visible-min-zoom およびvisible-max-zoom属性で示された拡大率による表示条件を満たしていない場合は取得されません。level of detailの機構に相当します。（x.y,width,height属性と組み合わせることで、タイルピラミッド（ラスター、ベクターを含む）機構を実現します。詳しくは[http://kikakurui.com/x7/X7197-2012-01.html JISX.7197]、[https://www.w3.org/Submission/2011/04/ Tiling and Layering Moduleサブミッション]、もしくは[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html こちらの論文]を参照&lt;br /&gt;
** commonQuery属性：[[#レイヤーsvgコンテンツ]]のanimation要素でこの属性を設置すると、そのレイヤーのコンテンツを取得するすべてのGETリクエストのクエリパートにこの属性で設定した値が共通付加されます。(もしKey=Valueの形のクエリを追加したい場合は文字列として&amp;quot;Key=&amp;quot;の部分も含めてこの属性値に設定します。)&lt;br /&gt;
*iframe&lt;br /&gt;
** animationと同等&lt;br /&gt;
*image&lt;br /&gt;
** 別のビットイメージコンテンツを取得して埋め込みます。&lt;br /&gt;
** animation属性のx,y,width,height属性と同様の追加のlazy loadの振る舞いを持ちます。&lt;br /&gt;
** visible-min-zoom およびvisible-max-zoom属性の振る舞いも同等です。&lt;br /&gt;
** xlink:href属性はspatial fragment をサポートし、(xywhによっ参照されるimageの部分を埋め込む機能をサポートします。)。もしもアスペクト比が異なった場合（ＴＢＤ）&lt;br /&gt;
** style:filterプロパティによる画像処理をサポートします。&lt;br /&gt;
** data-mercator-tile=&amp;quot;true&amp;quot;　属性が設定されている場合、そのビットイメージはメルカトル図法で描画されていることを示します。&lt;br /&gt;
** htmlのimg要素のcrossoriginに対応する属性を持つことができます（この場合ビットイメージの埋め込みに際しoriginヘッダが送信）&lt;br /&gt;
*view&lt;br /&gt;
&lt;br /&gt;
====属性====&lt;br /&gt;
*&amp;lt;code&amp;gt;ref(svg,x,y)&amp;lt;/code&amp;gt; ：SVG1.2Tの[https://www.w3.org/TR/SVGTiny12/single-page.html#coords-transform-ref TransformRef]属性により、non-scaling objectが設置できます。Pointフィーチャの可視化に効果的です。　&lt;br /&gt;
&lt;br /&gt;
'''TBD'''&lt;br /&gt;
*fill&lt;br /&gt;
*stroke&lt;br /&gt;
*arrow&lt;br /&gt;
*dasharray&lt;br /&gt;
*viewvox&lt;br /&gt;
*opacity&lt;br /&gt;
*style&lt;br /&gt;
**image-rendering : pixelated / image要素&lt;br /&gt;
**fill&lt;br /&gt;
**stroke&lt;br /&gt;
**opacity&lt;br /&gt;
*meta&lt;br /&gt;
**http-equiv=&amp;quot;refresh&amp;quot; : [[#レイヤー|レイヤーsvgコンテンツ]]のみ。contentに秒数を設定することで、そのレイヤーを指定秒数ごとに(再読み込み)更新する。script要素はonloadが再実行される。　注：ブラウザのキャッシュが効く可能性を考慮して実装する必要がある。&lt;br /&gt;
&lt;br /&gt;
==第三章：ウェブアプリケーションの開発==&lt;br /&gt;
本章はSVGMap Revsion 0.1フレームワークを用いたウェブアプリケーションの開発について解説します。&lt;br /&gt;
本フレームワークによる開発部分は以下に分類されます。&lt;br /&gt;
*[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーション(SVGMapフレームワーク)&lt;br /&gt;
* 動的な地図レイヤー(Layers as WebApps) : SVGコンテンツに以下のいずれかの情報を設定する&lt;br /&gt;
** [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素のdata-controller属性　[[#.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC.E5.9B.BA.E6.9C.89.E3.81.AEUI|レイヤー固有のUI]]&lt;br /&gt;
** svgドキュメントに設置されたscript要素 [[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVGMapフレームワーク===&lt;br /&gt;
[[#フレームワークの呼び出し|ルートhtml文書]]によるウェブアプリケーションはSVGMapLv0.1フレームワークを用いたウェブアプリケーションの基本であり、そのhtml文書と底傘参照されたjavascriptライブラリを読み込んだwindowが持つ''''svgMap''''という名前のインスタンスを用いてフレームワークのための拡張機能を利用することができます。&lt;br /&gt;
&lt;br /&gt;
====SVGMapが持つ基幹オブジェクト====&lt;br /&gt;
SVGMapLv0.1フレームワークのインスタンス''''svgMap''''が持つ基幹のオブジェクトを解説します。これらの基幹オブジェクトはそれぞれゲッター(getSvgImages, getSvgImagesProps)によって取得できます。&lt;br /&gt;
=====svgImages[]=====&lt;br /&gt;
[[#getSvgImages|getSvgImages()]]により取得できる。svgImages[hashID]は、 現在ローディングされているSVGドキュメント(“XML” DOMツリー(SVG DOMツリーというよりむしろ))が蓄積されているハッシュテーブル&lt;br /&gt;
*ハッシュID：フレームワークが任意に付番した文書ID。ただし、最初にロードされるルートのドキュメントのハッシュキーは、”root”&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが[[#svgImage|svgImage]]で取得できる。&lt;br /&gt;
&lt;br /&gt;
=====svgImagesProps[]=====&lt;br /&gt;
[[#getSvgImagesProps|getSvgImagesProps()]]によって取得できる。&lt;br /&gt;
同、個々のSVGドキュメントが持つ、各種プロパティが蓄積されているハッシュテーブル。&lt;br /&gt;
注記がない限り全てReadonly&lt;br /&gt;
*ハッシュID： svgImages同様&lt;br /&gt;
*なお、[[#レイヤー固有のUI]]のwebAppでは、そのレイヤーに該当するSVGドキュメントが持つ、各種プロパティが[[#svgImageProps|svgImageProps]]で取得できる。&lt;br /&gt;
======プロパティリスト======&lt;br /&gt;
*.Path	コンテンツのパス（webAppsのdocument(html) rootに対する相対パス。Originが違う場合は絶対パス(クエリパートやフラグメント(ハッシュ)も含む)&lt;br /&gt;
*.CRS	地理座標からSVG座標に変換するための変換パラメータ	&lt;br /&gt;
*.script	SVG文書がscript要素を持つとき、そのscriptへのインターフェースが登録される。同script要素で生成されるオブジェクトに暗黙に登録されるメンバー変数については、[[#.E5.8B.95.E7.9A.84.E3.81.AA.E5.9C.B0.E5.9B.B3.E3.83.AC.E3.82.A4.E3.83.A4.E3.83.BC|script要素による動的な地図レイヤー]]の章を参照&lt;br /&gt;
*.editable	編集可能レイヤーを示す　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = editableに対応]]&lt;br /&gt;
*.editing	編集可能レイヤーを編集中&lt;br /&gt;
*.isClickable	クリッカブルなレイヤーを示す&lt;br /&gt;
** true:設定　[[#class属性によるレイヤーのグルーピング・クリッカブル機能の提供|レイヤーのclass = clickableに対応]]&lt;br /&gt;
** 以下をメンバーに持つオブジェクト:ハイライト時のスタイルを設定可能(rev18以降)&lt;br /&gt;
*** .hilightFillStyle : ポリゴンオブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 塗りの色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .lineWidth : 線幅&lt;br /&gt;
*** .hilightStrokeStyle : 線オブジェクトのハイライト時スタイル（以下のメンバーが無い場合はハイライトしない）&lt;br /&gt;
**** .color : 線の色 (CSS の color値として解釈される文字列)&lt;br /&gt;
**** .widthIncrement : 線幅の増加値&lt;br /&gt;
*.parentDocId	このSVG文書を埋め込んでいる、親のSVG文書のハッシュID&lt;br /&gt;
*.childImages[hashID]	このSVG文書が読み込んでいる、子のSVG文書(複数)&lt;br /&gt;
*.refresh&lt;br /&gt;
**.loadScript&lt;br /&gt;
**.timeout&lt;br /&gt;
**.start&lt;br /&gt;
*.controller	レイヤー固有のUIへの(web appsのdoc rootに対する)相対パス&lt;br /&gt;
*.isSVG2	その文書がSVG2タイプの文書であるかどうか(CRSとembedの仕方がちがう）&lt;br /&gt;
*.rootLayer	そのSVG文書が属する「レイヤー」を示す文書&lt;br /&gt;
*.scale         そのSVG文書の現在のスケール。スケールはそのSVG文書の座標系と画面の座標系との間の値（地理座標系ではない）。拡大するとスケール値は大きくなる&lt;br /&gt;
*.preRenderControllerFunction そのSVG文書の再描画(画面更新)シーケンスの直前に実行される関数&lt;br /&gt;
*.hash          そのレイヤーのURLのフラグメント部（この値は、レイヤ固有WebAppで変更が有効）&lt;br /&gt;
&lt;br /&gt;
====利用可能API====&lt;br /&gt;
【TBD】 APIのリストは下記の通りです。&lt;br /&gt;
=====SVGMap.で呼び出せるAPI=====&lt;br /&gt;
======Geo2SVG======&lt;br /&gt;
*Geo2SVG( lat , lng , crs ) : 指定された緯度(lat)・経度(lng)・CRSより、SVG座標を計算する&lt;br /&gt;
======POIviewSelection======&lt;br /&gt;
*POIviewSelection( poi ) : 指定されたPOIの属性・リンクの表示選択画面を表示する。また、選択したイベントに従い、属性の表示または、リンク先のページを表示する。&lt;br /&gt;
======SVG2Geo ======&lt;br /&gt;
*SVG2Geo ( svgX , svgY , crs , inv ) : 指定されたSVG座標(svgX , svgY)をCRSにより、GEO座標に変換する。または、invにより逆変換する&lt;br /&gt;
======addEvent======&lt;br /&gt;
*addEvent(elm,listener,fn) : 指定された要素(elm)にイベント属性(listener)時の呼び出す関数(fn)を設定する (addEventListenerが実装されていなかったブラウザサポートの名残です)&lt;br /&gt;
======callFunction======&lt;br /&gt;
*callFunction( fname ,p1,p2,p3,p4,p5) : 指定した関数(fname)を引数(p1,p2,p3,p4,p5)を渡してフレームワーク内の任意の関数を実行する。(フレームワークの内部関数も呼び出すことができる)&lt;br /&gt;
======captureGISgeometries======&lt;br /&gt;
*captureGISgeometries( cbFunc , prop1 , prop2 , prop3 , prop4 , prop5 , prop6 , prop7 ): 現在画面上に表示中の地図コンテンツに対応した、GeoJsonのGeometryデータ構造に準拠のGISgeomerry情報をがレイヤ単位でまとまった連想配列の形で取り出す。非同期処理で、cbFuncの最初の引数に返却される。&lt;br /&gt;
** 連想配列のハッシュ値：レイヤID&lt;br /&gt;
** geomeryには、src(そのジオメトリのもととなっているSVGの図形要素), href(ビットイメージの場合のリンク)が付加される&lt;br /&gt;
** geoJsonのgeometryに相当する情報が含まれる（座標は[経度,緯度]）&lt;br /&gt;
** display=&amp;quot;none&amp;quot;の図形要素は表示されていないとみなされる。また画面外にある図形要素も表示されていないとみなされる。画面に部分的に表示されている要素は表示されているものとみなされるとともにクリッピングも行われない。&lt;br /&gt;
** [[#captureGISgeometriesOption|captureGISgeometriesOption]](true)を設定してから実行すると、ビットイメージもジオメトリとして取得する。（ただし実データは含まれないので必要に応じて[[#getImagePixelData|getImagePixelData]]で取得する）&lt;br /&gt;
*** type : Coverage&lt;br /&gt;
*** src : 画像情報のURL&lt;br /&gt;
*** coordinates : transformのb,c==0の場合、当該画像の南西、北東端が設定される&lt;br /&gt;
*** transform : b,c!=0の場合の、画像の座標(左上隅を0,0、右下隅が画像のw,h)から地理座標([経度,緯度])への一次座標変換情報(a,b,c,d,e,f)が設定される&lt;br /&gt;
&lt;br /&gt;
======captureGISgeometriesOption======&lt;br /&gt;
*captureGISgeometriesOption(BitImageGeometriesCaptureFlg, TreatRectAsPolygonFlg, SkipVectorRenderingFlg, captureAlsoAsBitImage): captureGISgeometriesでキャプチャするデータの取得条件を設定する。&lt;br /&gt;
** BitImageGeometriesCaptureFlg: ビットイメージタイルをカバレッジとして取得するか(Default:false)。captureGISgeometriesを呼び出す前に使用する。&lt;br /&gt;
*** 2019.5.17アップデートで、transform matrix(非対角要素あり)を持つビットイメージタイルについても必要な情報を得られるようになった。&lt;br /&gt;
** TreatRectAsPolygonFlg: rect要素をポリゴンとして扱う(デフォルトは円もrectもPointとして扱われる)&lt;br /&gt;
** SkipVectorRenderingFlg: ベクトル図形の描画をスキップする&lt;br /&gt;
** captureAlsoAsBitImage: polygon/polylineの図形を描画したビットイメージをレイヤー単位でカバレッジデータとして取得&lt;br /&gt;
*captureGISgeometriesOption(captureGISgeometriesOptionObject) : オブジェクトでも設定できる(rev18以降)（以下そのメンバー変数：全て値はboolean）&lt;br /&gt;
** .BitImageGeometriesCaptureFlag, .TreatRectAsPolygonFlag, .SkipVectorRendering, .captureAlsoAsBitImage　上と同様&lt;br /&gt;
&lt;br /&gt;
======checkSmartphone======&lt;br /&gt;
*checkSmartphone() : タッチに対応したスマホブラウザなのかどうかを判別&lt;br /&gt;
======childDocOp======&lt;br /&gt;
*childDocOp(func , docHash , param1, param2 , param3 , param4 , param5) : 指定した文書をルートにして、DOM操作をその子文書に対して実行する。なおこれはlinkedDocOpの直系の子供のみ適用版(自身も適用しない)&lt;br /&gt;
======dynamicLoad======&lt;br /&gt;
*dynamicLoad( docId , parentElem ) : 指定した文書ID(docId)以下の表示に必要な文書を読み込み、指定したdiv要素(parentElem)に表示する&lt;br /&gt;
======escape======&lt;br /&gt;
*escape(str) : 以下の文字をHTMLエスケープする(&amp;amp;amp;:&amp;amp;amp;amp,&amp;quot;:&amp;amp;amp;quot;,':&amp;amp;amp;#039;,&amp;lt;:&amp;amp;amp;lt;,&amp;gt;:&amp;amp;amp;gt;)&lt;br /&gt;
======geo2Screen======&lt;br /&gt;
*geo2Screen( lat ,lng ) : 地理座標を指定すると、その画面上のキャンバスの座標(px)を返す&lt;br /&gt;
======getBBox======&lt;br /&gt;
*getBBox( x , y , width , height ) : 指定された値でviewBoxを作成する&lt;br /&gt;
&lt;br /&gt;
======getBasicPermanentLink======&lt;br /&gt;
* getBasicPermanentLink(copyLinkTextToClipboard) : 現在の表示状態(レイヤーの表示非表示および表示領域)を反映した基本的なパーマリンクを生成する&lt;br /&gt;
** URLオブジェクトが返却される&lt;br /&gt;
** copyLinkTextToClipboardがtrue場合、クリップボードにもURLがコピーされる。&lt;br /&gt;
** 生成されるURLは、[[#起動URLによるオプション指定]]の仕様に基づく&lt;br /&gt;
** 参考：[[#サブレイヤーパーマリンク]]&lt;br /&gt;
&lt;br /&gt;
======getCentralGeoCoorinates======&lt;br /&gt;
*getCentralGeoCoorinates() : グローバル変数 rootViewBox,rootCrsから画面中心地理座標を得る&lt;br /&gt;
======getConversionMatrixViaGCS======&lt;br /&gt;
*getConversionMatrixViaGCS( fromCrs , toCrs ) : 元座標変換行列(fromCrs)から先座標変換行列(toCrs)への変換行列を作成する&lt;br /&gt;
&lt;br /&gt;
======getCORSURL======&lt;br /&gt;
* getCORSURL(originalURL, alsoCrossoriginParam) : クロスオリジンアクセス用URLを生成する。([[#setProxyURLFactory|setProxyURLFactory]]の第4,5引数が設定されている場合)&lt;br /&gt;
** alsoCrossoriginParam クロスオリジンアクセスに際してoriginヘッダが必要かを取得する(この引数がある場合は.url, .crossorigin メンバを持つオブヘクトが返却される)&lt;br /&gt;
** レイヤー固有UIのウェブアプリなどで独自にクロスオリジンアクセスを行ってデータを取得するような場合にプロキシ経由のURLを生成するのに利用できます。&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======getDevicePixelRatio======&lt;br /&gt;
*getDevicePixelRatio( docId ) : setDevicePixelRatioで設定した値を取得できる。 docIdが指定されなかった場合は全ての値が得られる&lt;br /&gt;
&lt;br /&gt;
======getElementByImageId======&lt;br /&gt;
*getElementByImageId( XMLNode , searchId ) : 指定されたSVG文書群ノード(XMLNode)以下の属性iidが指定されたID(searchId)と等しいノードを返す&lt;br /&gt;
&lt;br /&gt;
======getLoadErrorStatistics======&lt;br /&gt;
*getLoadErrorStatistics() : 伸縮スクロール、refreshScreenごとの、リソースの読み込み状況を取得する。&lt;br /&gt;
**メンバー変数:  timeoutBitImagesCount,timeoutSvgDocCount,otherBitImagesCount,otherSvgDocCount&lt;br /&gt;
&lt;br /&gt;
======getGeoViewBox======&lt;br /&gt;
*getGeoViewBox() : コンテナsvgのviewBoxをgeo変換したgeoのviewBoxを取得&lt;br /&gt;
======getHashByDocPath ======&lt;br /&gt;
*getHashByDocPath ( docPath ) : ターゲットのレイヤーのハッシュをPath名(docPath)から探し出す&lt;br /&gt;
======getHyperLink======&lt;br /&gt;
*getHyperLink( svgNode ) : 指定されたsvg文書(svgNode)から、親文書をたどり最初に取得できたハイパーリンクを取得&lt;br /&gt;
======getInverseMatrix======&lt;br /&gt;
*getInverseMatrix(matrix) : 逆行列を求める(matrix.a..f)&lt;br /&gt;
======getLayer======&lt;br /&gt;
*getLayer(layerID_Numb_Title) : [[#getLayerId|layerID]],title,番号,href(URI)のいずれかで、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]SVGDOMにおけるレイヤーの(svg:animation or svg:iframe)要素を取得する。getLayersと似ているが、getLayersのほうは任意のsvg文書(オプションなしではroot container)に対して、内包されるレイヤーのリストを返却。こちらは[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]に対して検索キーに基づいてレイヤーを返却する&lt;br /&gt;
&lt;br /&gt;
======getLayerId======&lt;br /&gt;
*getLayerId( layerKey ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における&amp;quot;レイヤ&amp;quot;概念のレイヤidを検索する。検索に用いることができるのは、getLayerと同じtitle,url,もしくはルートレイヤの要素&lt;br /&gt;
* layerIDはレイヤー名とは異なる、フレームワークによって任意に附番された、そのSVGMapドキュメントを識別するための文字列。このlayerIDを基に動作するAPIが多くあります。&lt;br /&gt;
* [[#レイヤー固有のUI]]　の　[[#layerID]] も参照&lt;br /&gt;
&lt;br /&gt;
======getLayers======&lt;br /&gt;
*getLayers( id ) : オプションなしの場合、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーに該当する要素をリストアップし、返却する。 オプションアリの場合、そのidを持つ要素を返却&lt;br /&gt;
======getLinearTransformMatrix======&lt;br /&gt;
*getLinearTransformMatrix(x1i,y1i,x2i,y2i,x3i,y3i,x1o,y1o,x2o,y2o,x3o,y3o) : ３つの基準点の変換前後の座標を与えると、それに適合する1次変換行列が得られる。(*i:変換前の座標, *o:変換後の座標)&lt;br /&gt;
======getMapCanvas======&lt;br /&gt;
*getMapCanvas() : 地図キャンバスとなる、おおもとのdiv要素の取得&lt;br /&gt;
======getMapCanvasSize======&lt;br /&gt;
*getMapCanvasSize() : 地図キャンバスのサイズ(画面サイズ)を取得&lt;br /&gt;
======getMouseXY======&lt;br /&gt;
*getMouseXY( evt ) : 指定されたイベント時のマウスの画面上の座標(px)を返す&lt;br /&gt;
======getNonScalingOffset======&lt;br /&gt;
*getNonScalingOffset(svgPoiNode) : 拡大縮小しても伸縮しない図形要素のオフセット値を取得する&lt;br /&gt;
======getObject======&lt;br /&gt;
*getObject( oname ) : 指定されたオブジェクト(oname)を取得&lt;br /&gt;
======getPoiPos======&lt;br /&gt;
*getPoiPos( svgPoiNode ) : =getNonScalingOffset&lt;br /&gt;
======getRoot2Geo======&lt;br /&gt;
*getRoot2Geo() : コンテナsvgのCRSの逆変換CRS( rootのsvg - &amp;gt; geo )を取得&lt;br /&gt;
======getRootCrs======&lt;br /&gt;
*getRootCrs() : コンテナsvgのCRS ( geo-&amp;gt;rootのsvg )を取得&lt;br /&gt;
======getRootLayersProps======&lt;br /&gt;
*getRootLayersProps() : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を取得する。Arrayが返却、並び順はsvgの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]と同じ（最初のレイヤーが一番下。selectメニュー創るときはひっくり返して使うこと）レイヤー情報：名称、表示非常時状態、レイヤーグループ、グループのフィーチャ(バッチ||スイッチ||ふつう)、編集可、編集中、対応SVGドキュメント、個別ユーザインターフェース、個別凡例&lt;br /&gt;
======getRootViewBox======&lt;br /&gt;
*getRootViewBox() : aspectを加味し実際に開いているコンテナsvgのviewBoxを取得&lt;br /&gt;
======getSvgImages======&lt;br /&gt;
*getSvgImages() : svg文書群(XML)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImages.5B.5D|svgImages]])&lt;br /&gt;
&lt;br /&gt;
======getSvgImagesProps======&lt;br /&gt;
*getSvgImagesProps() : svg文書群のプロパティ( .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller)の連想配列を取得(ハッシュキーは[[#getLayerId|layerID]](&amp;quot;root&amp;quot;以外は&amp;quot;i&amp;quot;+連番))&lt;br /&gt;
* (参考:[[#svgImagesProps.5B.5D|svgImagesProps]])&lt;br /&gt;
&lt;br /&gt;
======getSvgTarget======&lt;br /&gt;
*getSvgTarget( htmlImg ) : html文書中のimg要素(POI)を入力すると、対応するSVG文書の文書番号とその要素(use)が出力される。対応するuse要素を持つsvg文書自体を取得したい場合は.ownerDocumentする。idからhtml文書のimg要素を取得するには、Document.gelElementById(id)&lt;br /&gt;
======getSwLayers ======&lt;br /&gt;
*getSwLayers ( cat ) : swLayers[クラス名]に、クラス名ごとのレイヤー(のSVG要素)の全リストを構築する。catがある場合は、catの名称を持つもののリストのみを構築する&lt;br /&gt;
======getSymbols======&lt;br /&gt;
*getSymbols(svgDoc) : POI編集のsymbol選択を可能にするとともに、defsは、useより前に無いといけないという制約を払った&lt;br /&gt;
======getTickerMetadata======&lt;br /&gt;
*getTickerMetadata() : 現在Tickerが表示されているグラフィックスオブジェクトのメタデータを取得する&lt;br /&gt;
======getTransformedBox ======&lt;br /&gt;
*getTransformedBox ( inBox , matrix ) : 指定されたviewBox(inBox)を変換行列にてサイズ変更と移動のみでの座標変換する。b=0、c=0の場合のみ利用可能。たとえば、matrixには、svgImagePropsのCRSを設定することで、そのSVGMapコンテンツのSVG座標系でのviewPortが計算できる。このときmatrixは線形変換の係数が含まれたオブジェクトでも良いし、[[#.E5.A4.9A.E6.A7.98.E3.81.AA.E5.9B.B3.E6.B3.95.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.A8.E5.88.A9.E7.94.A8|非線形変換のための関数が含まれたオブジェクト]]でも良い。　svgMap.getTransformedBox(svgMap.getGeoViewBox(),svgImageProps.CRS)&lt;br /&gt;
&lt;br /&gt;
======getUaProp======&lt;br /&gt;
*getUaProp() : ブラウザの種類(isIE：IEかどうか、isSP：スマートフォンかどうか)を取得する&lt;br /&gt;
======getVerticalScreenScale======&lt;br /&gt;
*getVerticalScreenScale(screenLength) : 垂直(緯度)方向のscreenLengthに対する長さを取得する(input: px, return : Km)&lt;br /&gt;
======getViewBox======&lt;br /&gt;
*getViewBox( svgDoc ) : 指定したSVG文書のviewBoxを取得&lt;br /&gt;
======gps======&lt;br /&gt;
*gps() : ブラウザの測位APIによって測位しその点を中心に表示、表示縮尺は測位精度を元に適当に決定&lt;br /&gt;
======gpsCallback======&lt;br /&gt;
*gpsCallback(position) : GPS測位が成功した後に実行されるコールバック関数で、positionを中心とした場所を表示させる&lt;br /&gt;
======handleResult======&lt;br /&gt;
*handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ) : SVG文書を(docPathから)svg文書群とそのプロパティをHTTPXMLRequest(httpRes)から親文書(parentSvgDocId)の子文書(docId)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======ignoreMapAspect======&lt;br /&gt;
*ignoreMapAspect() : 地図のアスペクト比を、rootSVGのviewBox( or hashのviewBox)そのものに設定する&lt;br /&gt;
======initLoad======&lt;br /&gt;
*initLoad() : load時に&amp;quot;一回だけ&amp;quot;呼ばれる初期化関数&lt;br /&gt;
======isIntersect======&lt;br /&gt;
*isIntersect( rect1, rect2 ): rect1(x,y,width,height)とrect2が交差(包含も含む)しているかどうかを返却&lt;br /&gt;
======linkedDocOp======&lt;br /&gt;
*linkedDocOp( func , docHash , param1, param2 , param3 , param4 , param5 ) : 再帰実行のルートになる文書のハッシュ(docHash)以下の子・孫・・・文書に対して、同じ処理(func( docHash , param1, param2 , param3 , param4 , param5 ))を再帰実行する関数&lt;br /&gt;
======loadSVG======&lt;br /&gt;
*loadSVG( path , id , parentElem , parentSvgDocId) : SVG文書を(pathから)svg文書群とそのプロパティを親文書(parentSvgDocId)の子文書(id)として読込み、指定されたHTML要素(parentElem)に貼り付ける&lt;br /&gt;
======matMul======&lt;br /&gt;
*matMul( m1 , m2 ) : 行列の積  x',y' = m2(m1(x,y)) = m(x,y) となる変換行列を構築&lt;br /&gt;
======numberFormat======&lt;br /&gt;
*numberFormat( number , digits ) : 指定された数値(number)を小数点以下第digit+1位を四捨五入した値を取得&lt;br /&gt;
======override======&lt;br /&gt;
*[OBSOLUTEWD] override( mname , mval ) : グローバルオブジェクトの関数プロパティでmnameという変数にmvalの値を代入する&lt;br /&gt;
&lt;br /&gt;
======panMap======&lt;br /&gt;
* panMap( x, y, options ) : 地図をスムースにスクロールさせる&lt;br /&gt;
** x,y : パン量 デフォルトはpx&lt;br /&gt;
** option.unit でパン量のコンテキストを変化できる&lt;br /&gt;
*** &amp;quot;%&amp;quot;||&amp;quot;percent&amp;quot;||&amp;quot;ratio&amp;quot; : 地図キャンバスに対する相対値で指定 (%,percentはパーセント, ratioは比率)&lt;br /&gt;
*** &amp;quot;canvas&amp;quot; : 地図キャンバス上の指定した座標を地図中心に&lt;br /&gt;
*** Note: 地理座標でパンする場所を変えたい場合は[[#geo2Screen]]を併用すると良い&lt;br /&gt;
&lt;br /&gt;
======parseEscapedCsvLine======&lt;br /&gt;
*parseEscapedCsvLine(csv) : CSV 1行分文字列データ(csv)をエスケープを考慮して配列にパースする。&lt;br /&gt;
======refreshScreen======&lt;br /&gt;
*refreshScreen() : 画面の再描画を実行する （[[解説書#.E5.86.8D.E6.8F.8F.E7.94.BB.E3.81.AE.E5.88.B6.E9.99.90|参考情報]]）&lt;br /&gt;
&lt;br /&gt;
======registLayerUiSetter======&lt;br /&gt;
*registLayerUiSetter( layerUIinitFunc, layerUIupdateFunc ) : レイヤー選択UI初期化関数と更新用関数を設定する&lt;br /&gt;
======reLoadLayer======&lt;br /&gt;
*reLoadLayer(layerID_Numb_Title) : 指定したレイヤー([[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーのみ。小孫レイヤーはNG)をリロードする&lt;br /&gt;
======resumeToggle======&lt;br /&gt;
*resumeToggle(evt) : 引数のイベント(evt)ターゲットのチェックボックスのチェック状態により、setResumeを実行する&lt;br /&gt;
======screen2Geo======&lt;br /&gt;
*screen2Geo( screenX , screenY ) : 画面上の座標(px)を指定すると、その地理座標を返す&lt;br /&gt;
======setCenterHitTest======&lt;br /&gt;
*setCenterHitTest(enable) : 自動中心ヒットテストの設定を変更する デフォルト:true&lt;br /&gt;
======setCustomModal======&lt;br /&gt;
*setCustomModal( messageHTML , buttonMessages , callback,callbackParam) : モーダル画面を出現させ、指定されたメッセージ(messageHTML(String)もしくはdomオブジェクト(Object))、指定されたボタン(buttonMessages(Array))を表示する。ボタンが押された場合、コールバック関数(callback)を引数(クリックしたボタンのインデックス, callbackParam)を渡し呼び出す。&lt;br /&gt;
messageにHTML Stringだけではなく、DOM objectが使える点、ボタンに対するcallbackを設定できる点。ただしモーダルダイアログになる点が[[#showModal]]と異なる。&lt;br /&gt;
&lt;br /&gt;
======setDefaultHilightStyle======&lt;br /&gt;
*setDefaultHilightStyle( style ) : ヒットテストなどによるオブジェクトのハイライト時のスタイルを設定する&lt;br /&gt;
* style : {stroke:{color,widthIncrement}, fill:{color,lineWidth,lineColor}}&lt;br /&gt;
** stroke : 線オブジェクトに対してハイライト時の色(color)と線幅増分(widthIncrement)&lt;br /&gt;
** fill : 塗りつぶしオブジェクトに対してハイライト時の色(color)、輪郭線幅(lineWidth)、輪郭線色(lineColor)&lt;br /&gt;
&lt;br /&gt;
======setDevicePixelRatio======&lt;br /&gt;
*setDevicePixelRatio( dpr (, layerId) ) : zoom計算時に用いる(たとえば２にするとzoom値が本来の２分の１になる)変数を指定値(dpr)に設定する。ズームに応じた表示制御(visible*zoom属性等のLevel of Detail機能)に影響を与える。オプションの[[#getLayerId|layerId]]を指定すると、指定したlayerに対して別個の値を設定する。dprにnullを与えると初期値(1)にクリア。&lt;br /&gt;
&lt;br /&gt;
======setGeoCenter======&lt;br /&gt;
*setGeoCenter( lat , lng , radius) : 中心地理座標を指定して地図を移動 (radiusは緯度方向の度1≒110Km) lat,lng:必須 radius:オプション(今の縮尺のまま移動)&lt;br /&gt;
======setGeoViewPort======&lt;br /&gt;
*setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh) : 地理(グローバル)座標系で指定したエリアを包含する最小のviewportを設定する&lt;br /&gt;
======setLayerVisibility======&lt;br /&gt;
*setLayerVisibility([[#getLayerId|layerID]]_Numb_Title, visivility, [options]) : 指定した[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のレイヤーの表示非表示を設定し、layerListUIのアップデートも行う&lt;br /&gt;
** layerID : String: [[#getLayerId|layerID]]のの文字列&lt;br /&gt;
** visivility : Boolean&lt;br /&gt;
** options : Object　以下のメンバー変数でオプションの指定が可能&lt;br /&gt;
*** .exec : String : 指定したレイヤーがレイヤー固有UIを持つ場合、その起動を指定できます。与えることができる文字列は[[#.E8.A9.B3.E7.B4.B0|data-controllerの起動オプション]]と同じ。&lt;br /&gt;
*** .hash : 指定したレイヤーを表示するときにハッシュ値を設定する&lt;br /&gt;
&lt;br /&gt;
======setMapCanvas : ======&lt;br /&gt;
*setMapCanvas : ( mc ) : 地図キャンバスとなる、おおもとのdiv要素を指定した要素(mc)に設定&lt;br /&gt;
======setMapCanvasCSS======&lt;br /&gt;
*setMapCanvasCSS(mc) : マップキャンバスのCSS(postion、overflow、top、left、width、height)を設定&lt;br /&gt;
======setMapCanvasSize======&lt;br /&gt;
*setMapCanvasSize( mcs ) : 地図キャンバスのサイズを指定したサイズ(mcs)に設定&lt;br /&gt;
======setPreRenderController======&lt;br /&gt;
*setPreRenderController( layerID, cntFunc ) : 再描画(画面更新)シーケンスの直前に実行する関数(cntFunc)を設定する。　[[#getLayerId|layerID]]が指定されていると、そのIDをもつSVG文書に対して設定する。指定されていない場合は、全てのSVG文書に対して指定した関数が描画前に実行される。cnfFuncが無い場合は設定を解除する。また、cntFuncには再描画前制御の際に必要になるかもしれないいくつかの変数が第一引数にオブジェクトの形で渡される。(docId,scale,actualViewBox,geoViewBox,viewChanged(zoom|scroll|false) なお、SVGMapLayerUI.jsが有効化されている場合、[[#.E6.8B.A1.E5.BC.B5API|レイヤ固有UIのhtml文書中のscript内にpreRenderFunctionという関数]]がある場合、そのレイヤーを指定したsetPreRenderControllerでの関数設定と同じ振る舞いをする。なお、この処理内容は、動的レイヤー(&amp;lt;script&amp;gt;を持つSVGコンテンツ)のonload関数と同じタイミングで呼び出される関数をレイヤ固有UI等に設置できるものと考えると良い。&lt;br /&gt;
&lt;br /&gt;
======setResume======&lt;br /&gt;
*setResume( stat ) : レジュームを実行するかどうかを引数(stat)によって設定し、cookieにレイヤー情報を保存する&lt;br /&gt;
======setRootLayersProps======&lt;br /&gt;
*setRootLayersProps(layerID_Numb_Title, visible , editing , hashOption , removeLayer , execOption ) : [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の(animetion||iframeで構成される)レイヤー情報を設定する。[[#getLayerId|layerID]]_Numb_Titleは、レイヤー番号(root svg container内での順番)、[[#getLayerId|layerID]](svg文書のiid = htmlのid = selectのvalue)、タイトル名(不確実-同じ名前があるかもしれない。最初に当たったものを選択)。変化があるとtrueが返却される。&lt;br /&gt;
*visible , editingはtrue,false,nullのいずれか。nullの場合、その値を変化させないという意味。もしくは不合理の場合はfalseが返却される。この時classで設定されているレイヤーグループの特性(switch)に基づいた制御がかかる&lt;br /&gt;
*hashOption 指定したレイヤーを表示するとき、ハッシュを指定して表示する&lt;br /&gt;
*removeLayer 指定したレイヤーを消去する&lt;br /&gt;
*execOption レイヤ固有UIを持つレイヤーを表示する場合の起動方法を指定：&amp;quot;hiddenOnLayerLoad&amp;quot;, &amp;quot;onClick&amp;quot;, &amp;quot;appearOnLayerLoad&amp;quot;のいずれか。[[#.E8.A9.B3.E7.B4.B0|詳細はこちらを参照]]&lt;br /&gt;
&lt;br /&gt;
*setLayerVisibilityと異なり、アップデート(refreshScreen())は別途行う必要がある&lt;br /&gt;
&lt;br /&gt;
======setRootViewBox ======&lt;br /&gt;
*setRootViewBox ( rvb ) : aspectを加味し実際に開いているコンテナsvgのviewBoxを指定したコンテナsvgのviewBox(rvg)に設定*setShowPoiProperty( func , docId ) : 特定のレイヤー・svg文書(docId)もしくは、全体に対して別のprop.表示関数(func)を指定する。funcが未指定の場合、設定された関数をクリアする。指定した関数は、帰り値がfalseだった場合、デフォルトprop.表示関数を再度呼び出す&lt;br /&gt;
======setShowPoiProperty======&lt;br /&gt;
*setShowPoiProperty(func , docId ): 特定のレイヤー・svg文書(いずれもdocIDで指定)もしくは、全体に対してPOIをクリックした時の表示関数をセットする&lt;br /&gt;
**セットされていないときは内蔵のデフォルト関数が使用される&lt;br /&gt;
**docId: セットされていないときはすべてのレイヤの docIdがルートレイヤに対応するものの場合はそのレイヤー下の子孫文書に対しても&lt;br /&gt;
**func: コールバック関数&lt;br /&gt;
*** funcがセットされいていないときはクリアする&lt;br /&gt;
*** funcの第一引数にはクリックされた要素が入る&lt;br /&gt;
&lt;br /&gt;
======setSmoothZoomInterval======&lt;br /&gt;
*setSmoothZoomInterval(zoomInterval) : ズームアニメーションの設定(ズームイン／アウト後のタイル読み込み開始タイマー(ms))(Default:20ms)&lt;br /&gt;
======setSmoothZoomTransitionTime======&lt;br /&gt;
*setSmoothZoomTransitionTime(zoomTransitionTime) : ズームアップ[[#zoomup]]／ダウン[[#zoomdown]]／パン[[#panMap]]時の遷移時間(Default:300ms)&lt;br /&gt;
&lt;br /&gt;
======setSummarizeCanvas======&lt;br /&gt;
*setSummarizeCanvas( val ) : 2Dベクトル図形描画用に統合キャンバス(レイヤー単位でのキャンバス統合)の使用有無を設定する。デフォルトは統合する&lt;br /&gt;
======setUpdateCenterPos======&lt;br /&gt;
*setUpdateCenterPos(func) : 中心座標書き換え関数を指定した関数に設定(デフォルト:id=&amp;quot;centerPos&amp;quot;要素の文字列を適当に書き換える)&lt;br /&gt;
======setProxyURLFactory======&lt;br /&gt;
*setProxyURLFactory( documentURLviaProxyFunction, imageURLviaProxyFunction, imageCrossOriginAnonymous, imageURLviaProxyFunctionForNonlinearTransformation, imageCrossOriginAnonymousForNonlinearTransformation ): コンテンツの取得をプロキシ経由にする。&lt;br /&gt;
** documentURLviaProxyFunction : svgドキュメント用のプロキシ経由のURLを生成する関数をここに設定する。&amp;lt;code&amp;gt;URLviaProxy = documentURLviaProxyFunction(URL)&amp;lt;/code&amp;gt;&lt;br /&gt;
** imageURLviaProxyFunction : 同ビットイメージ用&lt;br /&gt;
** imageCrossOriginAnonymous : ビットイメージのコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** imageURLviaProxyFunctionForNonlinearTransformation: ビットイメージへの非線形図法変換専用のプロキシ経由URL生成関数を設定する。&lt;br /&gt;
** imageCrossOriginAnonymousForNonlinearTransformation : 同上のコンテンツ取得に際しcrossorigin = &amp;quot;anonymous&amp;quot;を設定&lt;br /&gt;
** 参考：[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|クロスオリジンアクセスのためのプロキシ設定]]&lt;br /&gt;
&lt;br /&gt;
======setZoomRatio ======&lt;br /&gt;
*setZoomRatio ( ratio ) : zoomUp、zoomDownボタン押下時のズームレシオを指定した値(ratio)に設定する&lt;br /&gt;
======showModal======&lt;br /&gt;
*showModal( htm , maxW, maxH) : ダイアログ表示フレームワークを呼び出し、指定したhtm文字列を最大maxW,H値の中で表示する。closeボタンはフレームワークで設置される （参考[[#setCustomModal]]）（API名に反して、この関数はモーダルダイアログではない、ダイアログボックスの挙動を取る）&lt;br /&gt;
** htm：ダイアログ内に表示するhtmlのソース文字列、もしくはHTML DOM Elementオブジェクト&lt;br /&gt;
** maxW, maxH : Optional: ダイアログのサイズ（もしウィンドサイズに収まらない場合は、このサイズを下回ることがある。指定されていない場合はhtmの内容をベースにサイズが変化する&lt;br /&gt;
&amp;lt;!-- ** Note: ダイアログに設置できる情報は、文字列で与えたhtmlのソースだけに限定される。　もしこのダイアログ内にボタン等を設け、処理を実行したい場合は、[[#setCustomModal]]を用いるか、&amp;lt;code&amp;gt;&amp;lt;input onclick=&amp;quot;javascriptソースコード&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;　のようにインラインで処理を埋め込むかする--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======showPage======&lt;br /&gt;
*showPage( hyperLink ) : 指定されたハイパーリンク先のページを表示する。ハッシュだけの場合は viewPort変化をさせる&lt;br /&gt;
======showUseProperty======&lt;br /&gt;
*showUseProperty( target ) : 指定されたPOI( target )の属性情報を表示する&lt;br /&gt;
======transform ======&lt;br /&gt;
*transform ( x , y , mat , calcSize , nonScaling) : 指定された座標を変換する。&lt;br /&gt;
======updateLayerListUI======&lt;br /&gt;
*updateLayerListUI() : レイヤーリストのUIの表示を更新したりレイヤー固有UIを設定したりする&lt;br /&gt;
** '''ルートコンテナのsvgmap文書をDOMで直接編集したり、setRootLayersPropsで操作した場合、この関数を呼ばないとレイヤ固有UIが正しく設定されないなど多くの処理が破綻するので、必ず呼ぶ必要がある。(近い将来refreshScreenで自動的に反映されるようにする予定)'''&lt;br /&gt;
&lt;br /&gt;
======zoomdown======&lt;br /&gt;
*zoomdown( ratio ) : 地図をスムースにズームダウン&lt;br /&gt;
** ratioはオプション(デフォルトは1.732)&lt;br /&gt;
&lt;br /&gt;
======zoomup======&lt;br /&gt;
*zoomup( ratio ) : 地図をスムースにズームアップ&lt;br /&gt;
** ratioはオプション(デフォルトは1.732) (デフォルトは[[#setZoomRatio]]で変更可)&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_Authoring_r*.jsを用いた場合に使える&lt;br /&gt;
======cancelPointingPoiRegister======&lt;br /&gt;
* cancelPointingPoiRegister: initPOIregistToolで設置したUIの地図クリック・タッチでの座標入力イベント(click, touchend)をキャンセルする&lt;br /&gt;
======clearTools======&lt;br /&gt;
*clearTools: オーサリングツールを除去する。&lt;br /&gt;
======initGenericTool======&lt;br /&gt;
*initGenericTool(targetDiv,poiDocId,cbFunc,cbFuncParam,options): 点、線、多角形（オプションでそれらのバッファ付き）の総合オーサリングツールを初期化する。&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** options: {withBufferedTools,editingStyle,shapeStyle}　その他オプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** withBufferedTools: boolean: trueでバッファ付きツールを追加&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルをブジェクトで指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルをブジェクトで指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール (Pointツールには影響しない)&lt;br /&gt;
&lt;br /&gt;
======initPOItools======&lt;br /&gt;
*initPOItools(targetDiv,poiDocId,cbFunc,cbFuncParam,getPointOnly,returnSvgElement,options)　: 複数のPOIを編集するツールを初期化する (このツールは一個しか設置できない)&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定 (buffer指定時に有効)&lt;br /&gt;
&lt;br /&gt;
======initPOIregistTool======&lt;br /&gt;
*initPOIregistTool(targetDiv,poiDocId,poiId,iconId,title,metaData,cbFunc,cbFuncParam,getPointOnly,returnSvgElement): 一個のPOINTオブジェクトの登録ツール・座標入力ツールを初期化する&lt;br /&gt;
** initPOItoolsと異なりこちらのツールは複数個設置できる&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** poiId : 登録するPOIのIDを指定&lt;br /&gt;
** iconId : 対象文書内のアイコンのIDを指定&lt;br /&gt;
** title : アイコンのタイトルを指定&lt;br /&gt;
** metaData : アイコンのメタデータ文字列を指定&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** getPointOnly : ポイントを取得するのみで、その点にuse要素を設置することはしない(Optional)&lt;br /&gt;
** returnSvgElement : trueで編集したSVG要素などがコールバック関数に構造化され返却される(Optional)&lt;br /&gt;
======initPolygonTools======&lt;br /&gt;
*initPolygonTools(targetDiv,poiDocId,cbFunc,cbFuncParam,isPolylineMode,options): POLYGONオブジェクトの&amp;quot;編集&amp;quot;ツール 新規追加、削除、変更などが可能　ただし一個しか設置できない &lt;br /&gt;
** コンテナsvgコンテンツでclickable及びeditableを設定したレイヤーで再編集可能&lt;br /&gt;
** targetDiv: 編集ツールを設置するDIV要素&lt;br /&gt;
** poiDocId : 対象とするDocId　文書にはuse要素でPointを設置するため、defs要素によって少なくとも一個以上のアイコンがあらかじめ定義されている必要がある&lt;br /&gt;
** cbFunc : 編集完了時に呼び出すコールバック関数(Optional)　第一引数にはツールの完了状態が文字列で返却される&lt;br /&gt;
*** 第一引数に成否、第二引数にcbFuncParam が入る。作成したPOIの情報は、SVGDOMから得るか、指定したdiv内に生成されているフォームから得る（少し使いづらいので、今後もう少し便利にするかもしれません）&lt;br /&gt;
** cbFuncParam : 同コールバック関数に渡す引数(Optional)&lt;br /&gt;
** isPolylineMode : ポリゴンではなくポリラインの編集ツールとする&lt;br /&gt;
** options : {bufferOption,editingStyle,shapeStyle}: その他のオプションをオブジェクトで指定(Optional)&lt;br /&gt;
*** bufferOption :  trueでバッファ付きツール&lt;br /&gt;
*** shapeStyle: {opacity,strokeWidth,stroke,fill}：描画スタイルを指定&lt;br /&gt;
*** editingStyle: {opacity,strokeWidth,stroke,fill}：編集中の表示スタイルを指定&lt;br /&gt;
*** useXlinkTitle:  trueでタイトル編集欄付きツール&lt;br /&gt;
&lt;br /&gt;
======setTargetObject======&lt;br /&gt;
*setTargetObject: TBD プログラムから編集対象オブジェクトを指示する（ただし編集中レイヤのオブジェクトに限る）&lt;br /&gt;
======isEditingGraphicsElement======&lt;br /&gt;
*isEditingGraphicsElement: 編集中のオブジェクトがあるかどうかを確認する&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_GIS_r*.jsを用いた場合に使える。なお本機能拡張はJSTS([https://unpkg.com/jsts@1.6.1/dist/jsts.min.js jsts.min.js])の読み込みがさらに必要。&lt;br /&gt;
&lt;br /&gt;
====== 参考：JSTS ======&lt;br /&gt;
[https://github.com/bjornharrtell/jsts/ JSTS](JavaScript Topology Suite)は、[https://github.com/locationtech/jts JTS](Java Topology Suite)をjavaScriptに移植した地理空間情報処理ライブラリです。地理空間情報の標準に準拠したAPIを備えています。&lt;br /&gt;
* [https://github.com/bjornharrtell/jsts JSTSのプロジェクトページ]&lt;br /&gt;
* [http://locationtech.github.io/jts/javadoc/ API](JTS用、JSTSもこれに準ずる) &lt;br /&gt;
* [https://www.tsusiatsoftware.net/jts/files/JTS_Library_for_Geometry_2011.pdf JTSの機能概要スライド]&lt;br /&gt;
&lt;br /&gt;
====== buildDifference======&lt;br /&gt;
* buildDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
====== buildUnion======&lt;br /&gt;
* buildUnion( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのUnionを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
====== buildSymDifference======&lt;br /&gt;
* buildSymDifference( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, getResultAsGeoJsonCallback,getResultAsGeoJsonCallbackParam)&lt;br /&gt;
** JSTSのSymDifferenceを実行&lt;br /&gt;
** 引数はbuildIntersectionの該当引数に対応（ただし、addSourceMetadataはない、haltComputingできない）&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
======buildIntersection======&lt;br /&gt;
*buildIntersection( sourceId1, sourceId2, targetId , strokeColor, strokeWidth, fillColor, progrssCallback, addSourceMetadata, getResultAsGeoJsonCallback, getResultAsGeoJsonCallbackParam, options )&lt;br /&gt;
** sourceId1とsourceId2のレイヤーに対してJSTSのIntersectionを実行し、結果をtargetIdレイヤーにコンテンツとして出力する。性能はgetIncludedPointsより低いことが多い intersection処理の振る舞いは[https://bjornharrtell.github.io/jsts/ JSTSを参照]&lt;br /&gt;
** sourceId1: sourceId1レイヤーのレイヤーID&lt;br /&gt;
** sourceId2: sourceId2レイヤーのレイヤーID&lt;br /&gt;
** targetId : targetId レイヤーのレイヤーID&lt;br /&gt;
** strokeColor : 線の色 (なお、strokeColor, strokeWidth, fillColor のいずれも指定ない場合は描画しない(getResultAsGeoJsonCallbackがあればそこに結果を変換するのみ))&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** progrssCallback: 変換途中の状況が返されるコールバック関数。&lt;br /&gt;
** addSourceMetadata: sourceId1とsourceId2の各図形要素に付随しているメタデータ(contentアトリビュートの値)を演算結果の該当する図形要素に結合して付加する。&lt;br /&gt;
** getResultAsGeoJsonCallback: 演算結果をgeoJsonで返却を受けたい場合にコールバック関数を指定する。第一引数に結果が返る&lt;br /&gt;
** getResultAsGeoJsonCallbackParam : 上記コールバック関数に送りたい引数(第二引数に入力される)&lt;br /&gt;
** options: その他のオプションを指定するオブジェクト(下記、メンバ変数)&lt;br /&gt;
*** uniteSource1: trueでsourceId1のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** uniteSource2: trueでsourceId2のジオメトリ群をuniteしてから演算する&lt;br /&gt;
*** areaCompare: trueで演算結果と元のジオメトリとの面積比をメタデータに付与&lt;br /&gt;
*** resultGroupId: 演算結果を生成するグループを指定&lt;br /&gt;
*** opacity: 透明度&lt;br /&gt;
&lt;br /&gt;
======captureGeometries======&lt;br /&gt;
*captureGeometries( cbFunc , opt ) : svgMap.captureGISgeometriesの引用&lt;br /&gt;
====== coverageImageXY2LatLng======&lt;br /&gt;
* coverageImageXY2LatLng(pixWidth , pixHeight, px,py,targetCoverage) : ビットイメージカバレッジのピクセル座標から地理座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** px,py : ビットイメージカバレッジのピクセル座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== drawGeoJson======&lt;br /&gt;
* drawGeoJson( geojson , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm, metaDictionary) : geojsonのgeomerty を指定したレイヤーに描画する&lt;br /&gt;
** geojson : geojson データのgeopmetry&lt;br /&gt;
*** メタデータ : メタデータはgeojsonの本来のメタデータ仕様(type:Featureのオブジェクトにpropertiesを設置する)で設定可能&lt;br /&gt;
**** また、連想配列もしくは配列の形で、関数の呼び出し時のmetadataパラメータでデフォルトのメタデータを指定できる。&lt;br /&gt;
**** また、geoJSONの任意のデータ階層にmetadataプロパティとしても埋め込める。&lt;br /&gt;
**** 加えて、propertiesを同様に任意のデータ階層に設定できる(この場合、上の階層の値は下の階層の値で上書きされる)&lt;br /&gt;
*** スタイリング : メタデータ仕様を拡張した、geojsonの[https://github.com/mapbox/simplestyle-spec mapbox拡張仕様]に基づいて、描画スタイルを各Featureに設定可能　上記の拡張properties拡張により、デフォルト描画スタイルを設定することも可能。&lt;br /&gt;
**** marker-sizeは未実装。marker-symbolではsvgコンテンツのdefsで登録済みのアイコンのIDを指定する。&lt;br /&gt;
**** 参考: properties.で設定できる、スタイル属性名: &amp;lt;code&amp;gt;title, description, marker-size, marker-symbol, marker-color, stroke, stroke-opacity, stroke-width, fill, fill-opacity&amp;lt;/code&amp;gt;&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ（連想配列）&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** metaDictionary: (Optional) メタデータとして要素に埋め込みたい属性名のリストを配列で指定する（これ以外の属性は無視するようになる）&lt;br /&gt;
&lt;br /&gt;
====== drawKml======&lt;br /&gt;
* drawKml( kml , targetSvgDocId, strokeColor, strokeWidth, fillColor, POIiconId, poiTitle, metadata, parentElm,styleData) : KMLを指定したレイヤーに描画する&lt;br /&gt;
** KML : KML 描画するKMLデータのXML DOM&lt;br /&gt;
** targetSvgDocId : 描画先のレイヤーID&lt;br /&gt;
** strokeColor : 線の色&lt;br /&gt;
** strokeWidth : 線幅（ただし、nonScalingStrokeのため px)&lt;br /&gt;
** fillColor : 塗りの色&lt;br /&gt;
** POIiconId :　Pointの場合のアイコンID(あらかじめ指定した描画先のレイヤーのコンテンツに該当IDのアイコンが定義されている必要がある)&lt;br /&gt;
** poiTitle : POIのタイトル&lt;br /&gt;
** metadata :  POIのメタデータ文字列&lt;br /&gt;
** parentElm : (Optional) 指定した要素の子要素として描画&lt;br /&gt;
** styleData : TBD&lt;br /&gt;
&lt;br /&gt;
====== getBufferedPolygon ======&lt;br /&gt;
* getBufferedPolygon(geom,bufferLength) : 任意のジオメトリ(geom)に対して、指定のバッファ長[m]のポリゴンジオメトリを生成する。&lt;br /&gt;
** Note: [[#captureGISgeometries]]で取得したデータ等も演算対象にすることができる。&lt;br /&gt;
&lt;br /&gt;
====== getColorString ======&lt;br /&gt;
* getColorString(r,g,b) : r,g,b値から、webColor文字列を生成する&lt;br /&gt;
&lt;br /&gt;
======getExcludedPoints======&lt;br /&gt;
*getExcludedPoints(poiID, polyID, cbFunc, param , progrssCallback , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されないものを抽出する。&lt;br /&gt;
** パラメータはinverseを除きgetIncludedPointsと同じ。&lt;br /&gt;
====== getImage======&lt;br /&gt;
* getImage(sourceData, renderingOptions ) : メッシュデータからビットイメージ(mage/pngのdataURL)を生成&lt;br /&gt;
** sourceData : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** width, height メッシュのピクセル数&lt;br /&gt;
*** rasterData[py][px] 以下のデータ構造を持つオブジェクト&lt;br /&gt;
**** color 以下のデータ構造を持つオブジェクト&lt;br /&gt;
***** r,g,b,a&lt;br /&gt;
**** inRange : boolean&lt;br /&gt;
** renderingOptions : 以下のデータ構造を持つオブジェクト&lt;br /&gt;
*** drawOutOfRange : boolean レンジ内ではなくレンジ外を描画する&lt;br /&gt;
*** fillColor : boolean  上記条件のピクセルを指定した色で描画する&lt;br /&gt;
*** useCoverageColor 上記条件のピクセルをカバレッジの色で描画する&lt;br /&gt;
&lt;br /&gt;
====== getImagePixelData======&lt;br /&gt;
* getImagePixelData(capturedSvgMapGeometry, callBackFunction, param) : ラスタ画像のビットマップデータを取得する。&lt;br /&gt;
** capturedSvgMapGeometry : [[#captureGISgeometries|captureGISgeometries]]で取得したビットイメージカバレッジのジオメトリ情報をもとに取得する&lt;br /&gt;
** callBackFunction : 取得したビットイメージデータが引数に渡される&lt;br /&gt;
*** data : RGBA intArray ( CanvasのContext.getImageData(...).dataで得られる情報と同様のデータ)&lt;br /&gt;
*** width&lt;br /&gt;
*** height&lt;br /&gt;
*** param : getImagePixelDataの第三引数がそのまま渡される&lt;br /&gt;
&lt;br /&gt;
====== getIncludedPoints======&lt;br /&gt;
* getIncludedPoints(poiID, polyID, cbFunc, param , progrssCallback , inverse , pointOnly ) : 指定したpoiID検索対象レイヤーのうち、指定したpolyIDポリゴンコンテンツレイヤーのポリゴンに内包されるものを抽出する。&lt;br /&gt;
** poiID : 検索対象コンテンツレイヤーのレイヤID&lt;br /&gt;
** polyID : ポリゴンコンテンツレイヤーのレイヤID&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** inverse : trueで getExcludedPoints&lt;br /&gt;
** pointOnly : trueの場合検索対象コンテンツレイヤーのジオメトリがPoint以外の物は無視、false(もしくは未設定)の場合はPolygonやMultiLineStringのデータの場合中心点をPointと見立てて検索 なお、ポリゴンやポリラインのしっかりした処理を期待する場合は下記のbuildIntersectionを使用すべき。&lt;br /&gt;
====== getInRangePoints======&lt;br /&gt;
* getInRangePoints(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : 検索対象のPointジオメトリが、検索条件としてのラスターデータ(カバレッジ)の特定色域に入っているものを検索する（ラスターGIS機能）&lt;br /&gt;
** poiID_or_points : 検索対象のPointジオメトリのあるレイヤIDもしくは、geoJsonのPointジオメトリ自体&lt;br /&gt;
** coverIDラスターデータ(カバレッジ)のレイヤーID&lt;br /&gt;
** rangeData : 色域 .hue, .satulation, .value, .alphaをそれぞれ指定する&lt;br /&gt;
*** hue: 0..360&lt;br /&gt;
*** satulation, value, alpha : 0..100&lt;br /&gt;
*** .hue, .satulation, .value, .alphaそれぞれのレンジは&amp;lt;nowiki&amp;gt;[[range1Min,Max],[range2Min,Max],...[rangenMin,Max]]&amp;lt;/nowiki&amp;gt;の形で指定する。&lt;br /&gt;
*** データがない場合のデフォルトは&amp;lt;nowiki&amp;gt;{hue:[[0,360]],satulation: [[10,100]],value:[[10,100]],alpha:[[10,100]]}&amp;lt;/nowiki&amp;gt; : アルファが10以上の全ての色&lt;br /&gt;
*** .outOfBoundsColor : TBD {r:255,g:0,b:0} の形で色を指定するとその色のピクセルは領域外(存在しないもの)として評価をスキップする&lt;br /&gt;
** cbFunc : 検索完了後の結果を返却するコールバック関数　第一引数にポイントがGeoJasonのGeometry形式で返却され、第二引数にその個数、第三引数に(あれば)下記paramが返却される&lt;br /&gt;
** param : cbFuncに渡す任意パラメータ(第三引数に入る)&lt;br /&gt;
** progrssCallback : 変換途中の状況が返されるコールバック関数。　変換中　時々呼び出され、変換状態[%]が第一引数に渡される。&lt;br /&gt;
** preCapturedGeometry : svgMap.captureGISgeometries()であらかじめ取得したgeometryがある場合、それを投入するとそれを用いて処理する&lt;br /&gt;
** computingOptions : getInRangeGeometriesOnCoverageを参照&lt;br /&gt;
====== getInRangeLineParts======&lt;br /&gt;
* getInRangeLineParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ラインストリングジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
====== getInRangePolygonParts======&lt;br /&gt;
* getInRangePolygonParts(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry , computingOptions ) : ポリゴンジオメトリ用のラスターGIS機能 パラメータはgetInRangePoints()と同じ&lt;br /&gt;
&lt;br /&gt;
====== getInRangeGeometriesOnCoverage======&lt;br /&gt;
* getInRangeGeometriesOnCoverage(poiID_or_points, coverID, rangeData, cbFunc, param , progrssCallback , preCapturedGeometry, computingOptions ) :  getInRange*を包含する関数&lt;br /&gt;
** computingOptions.targetVectorTypeで以下を設定することでそれぞれの機能を動かすことができる&lt;br /&gt;
*** 0:point,1:polyline(multiLineString),2:polygon&lt;br /&gt;
** computingOptions:&lt;br /&gt;
*** overlappingCoverage : &amp;quot;or&amp;quot;&lt;br /&gt;
*** splitByCoverage : boolean カバレッジが複数のビットイメージ(タイル)で構成されている場合、タイルごとに分割した答えを返す&lt;br /&gt;
*** &lt;br /&gt;
====== haltComputing======&lt;br /&gt;
* haltComputing() : getIncludedPoints, getExcludedPoints, buildIntersectionを中断する&lt;br /&gt;
====== imageUrlEncoder ======&lt;br /&gt;
* imageUrlEncoder : オリジナルのURLから、setImageProxyの設定を加味したURLを生成する関数&lt;br /&gt;
====== latLng2coverageImageXY======&lt;br /&gt;
* latLng2coverageImageXY(pixWidth , pixHeight, lng,lat,targetCoverage) : 地理座標からビットイメージカバレッジのピクセル座標を算出する関数&lt;br /&gt;
** pixWidth, pixHeight : ビットイメージカバレッジのサイズ&lt;br /&gt;
** lng,lat : 地理座標&lt;br /&gt;
** targetCoverage : getInRangePolygonParts で得られた返り値を設定する&lt;br /&gt;
====== latLng2GeoJsonPoint======&lt;br /&gt;
* latLng2GeoJsonPoint(lat , lng ) : 緯度経度をGeoJsonのPointジオメトリに変換する&lt;br /&gt;
====== renderImages ======&lt;br /&gt;
* renderImages(sourceDataArray, parentElment, crs, renderingOptions) : ビットイメージカバレッジ×ポリゴンGIS(getInRangePolygonParts)の結果を直接可視化する&lt;br /&gt;
**sourceDataArray : [[#getInRangePolygonParts]]の結果を設定&lt;br /&gt;
**parentElment: SVGMapコンテンツ内で描画する親要素を設定&lt;br /&gt;
**crs: 描画するSVGMapコンテンツのCRS matrix(a,b,c,d,e,f)を設定&lt;br /&gt;
**renderingOptions : [[#getImage]]を参照&lt;br /&gt;
&lt;br /&gt;
====== setImageProxy======&lt;br /&gt;
* setImageProxy( url , directURLls , useAnonProxy): getInRangePointsは、canvasを使った処理のため、CORSの制約にかかる場合、proxyを設定して回避できる。&lt;br /&gt;
** url : encodeURIComponent()でエンコードしたカバレッジのレイヤーのビットイメージのURLを付加すると、proxyとしてimageを返却してくれるURL文字列を指定&lt;br /&gt;
** directURLls : proxyを使わず直接アクセスするコンテンツを判定するための文字列の配列（この文字列のどれかが含まれていたら直接アクセス）&lt;br /&gt;
** useAnonProxy : Image.crossOrigin = &amp;quot;anonymous&amp;quot;を指定してアクセスする&lt;br /&gt;
&lt;br /&gt;
====== hsv2rgb ======&lt;br /&gt;
* hsv2rgb(h, s, v) : hsv値からrgb値の色情報変換&lt;br /&gt;
** h (hue): 0..360&lt;br /&gt;
** s (saturation): 0..100&lt;br /&gt;
** v (value): 0..100&lt;br /&gt;
** 帰り値 : {r,g,b}: いずれも0..255&lt;br /&gt;
&lt;br /&gt;
====== rgb2hsv ======&lt;br /&gt;
*rgb2hsv(r, g, b): RGB値からHSV値の色情報変換&lt;br /&gt;
** rgb: いずれも0..255&lt;br /&gt;
** 帰り値:{h,s,v}&lt;br /&gt;
*** h:0..360&lt;br /&gt;
*** s,v: いずれも0..100&lt;br /&gt;
&lt;br /&gt;
=====svgMapLayerUI.で呼び出せるAPI=====&lt;br /&gt;
以下のAPIは、SVGMapLv0.1_LayerUI2_r*.jsを用いた場合に使える。&lt;br /&gt;
======assignLayerSpecificUiElement======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* assignLayerSpecificUiElement( targetElement , isInline , autoSizing) : レイヤ固有UIを出力する先のDOM要素を指定する&lt;br /&gt;
** この関数は、レイヤーUIの初期化前～[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]読み込み前に呼ばれる必要がある（すなわち、load時のみ有効）&lt;br /&gt;
** targetElement : 出力先要素：出力先はsvgMapオブジェクトを持つwindowでなくても良い&lt;br /&gt;
** isInline : boolean 指定した要素をインライン要素として扱い、UIが存在しえない場合は消える。レイヤ固有UIを消すボタンも付与される&lt;br /&gt;
** autoSizing : boolean 自動リサイズを有効化&lt;br /&gt;
&lt;br /&gt;
======customEvents======&lt;br /&gt;
*customEvents() : サポートしているイベントを返却&lt;br /&gt;
&lt;br /&gt;
======launchController======&lt;br /&gt;
* &amp;gt;r4&lt;br /&gt;
* launchController(layerID, cbf) : レイヤ固有UIを出現させる。ただしそのレイヤーがレイヤー固有UIを持っており、且つ表示状態になっている必要がある。&lt;br /&gt;
** [[#getLayerId|layerID]] : レイヤーのID&lt;br /&gt;
** cbf (optional) : レイヤー固有UIが生成されたとき、第一引数にレイヤー固有UIのwindowオブジェクトが返却される。&lt;br /&gt;
&lt;br /&gt;
======layerSpecificUIhide======&lt;br /&gt;
* layerSpecificUIhide() : レイヤ固有UIを隠す&lt;br /&gt;
&lt;br /&gt;
======setLayerListmessage======&lt;br /&gt;
* setLayerListmessage( head , foot ) : head 及び footで指定した文字列を　レイヤリストUIのトップのメッセージに設定する。[head]numberOfVisibleLayers[foot] : デフォルトはhead :&amp;quot;Layer List: &amp;quot;, foot :&amp;quot; layers visible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=====svgMapPWA.で呼び出せるAPI=====&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
; 以下のAPIは、SVGMapLv0.1_PWA_r*.jsを用いた場合に使える。&lt;br /&gt;
:- SVGMap.jsをPrpgressiveWebApps(PWA)として動作させ、オフラインでも利用できるウェブアプリを構築することができる。&lt;br /&gt;
:- Progressive Web Appsが機能するブラウザで有効。Chrome,Edge(PC,Android), Safari(Apple製品)&lt;br /&gt;
:- iOS SafariのPWAネイティブキャッシュの50MB制限を回避するIndexedDBによる実装がなされており、そのクォータが許す限りの(iOSでも数百MB以上の)オフライン地図コンテンツを利用できる&lt;br /&gt;
:- 同じく、iOS Safariが持たないsyncの一部を代替する機能(オンラインになったらポストする機能)が利用できる&lt;br /&gt;
:- zip圧縮されたオフラインコンテンツパッケージ読み込み機構を使う場合はzip.jsおよびそれが利用するArrayBufferReader.js,deflate.js,inflate.jsの読み込みが必要。&lt;br /&gt;
:- &amp;lt;code&amp;gt;serviceWorkerPath&amp;lt;/code&amp;gt;グローバル変数で、専用のサービスワーカープログラムsvgMapServiceWorker_r*.jsのパスを指定する必要がある。&lt;br /&gt;
::- サービスワーカー～svgMapServiceWorker_r*.jsは、同jsと同じディレクトリにあるbaseResources.jsonを読み込み初期設定を行う&lt;br /&gt;
::- baseResources.json：　srcにサービスワーカーネイティブのキャッシュに読み込むべきリソースのリストを記載、mapCacheTargetに、SVGMapのコンテンツキャッシュを稼働させるターゲットとなるパスを記載&lt;br /&gt;
::-baseResources.jsonの例&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;src&amp;quot;: [&lt;br /&gt;
&amp;quot;index.html&amp;quot;,&lt;br /&gt;
&amp;quot;Container_mercator_org.svg&amp;quot;,&lt;br /&gt;
&amp;quot;SVGMapLv0.1_PWA_r5.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_r16.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_LayerUI2_r3.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_GIS_r2.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/SVGMapLv0.1_Authoring_r7.js&amp;quot;,&lt;br /&gt;
&amp;quot;js/jsts.min.js&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/gps_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/Xcursor.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomdown_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/zoomup_s.png&amp;quot;,&lt;br /&gt;
&amp;quot;imgs/mappin.png&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
&amp;quot;mapCacheTarget&amp;quot;:&amp;quot;localMaps/&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* autoPilotDownloader&lt;br /&gt;
*:エリアと縮尺を指定し、オートパイロットで地図画面をスクロールさせることで、オフラインキャッシュに地図を保存する動作を自動的に行う機能のオブジェクト。レイヤー固有UIでの利用などを想定しており、以下のメンバー関数を持つ&lt;br /&gt;
** halt()&lt;br /&gt;
**:オートパイロット動作を中断させる&lt;br /&gt;
** searchAll(initialViewBox, minScale, maxScale)&lt;br /&gt;
**:- initialViewBoxで指定したエリアを、minScale、maxScaleの間でオートパイロットをかけキャッシュに保存させる&lt;br /&gt;
**:- minScale, maxScaleは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]の座標系におけるscale値(getRootScale()で取れるもの)&lt;br /&gt;
** setProgressCallBack(cbf)&lt;br /&gt;
**:オートパイロット動作中の進行状況をcbfの第一引数に返却する&lt;br /&gt;
* async clearOfflineContents()&lt;br /&gt;
*:SVGMapのオフラインコンテンツを全消去する。SVGMapのオフラインコンテンツはserviceWorkerのネイティブキャッシュ機構とは別の独自キャッシュ機構(indexedDBを使用した機構)として構築される&lt;br /&gt;
* clearCache()&lt;br /&gt;
*:（未実装）serviceWorkerのネイティブキャッシュを全消去する&lt;br /&gt;
* cacheDB&lt;br /&gt;
*:SVGMapのオフラインコンテンツデータベースのオブジェクト。IndexedDBをpromise化した簡略的APIをメンバ関数として持つ。&lt;br /&gt;
** clear()&lt;br /&gt;
**:データベースをクリア&lt;br /&gt;
** async connect()&lt;br /&gt;
**:データベースに接続&lt;br /&gt;
** async delete(path)&lt;br /&gt;
**:pathで指定したコンテンツを削除&lt;br /&gt;
** async get(path)&lt;br /&gt;
**:pathで指定したコンテンツ(blob)を取得&lt;br /&gt;
** async getAll()&lt;br /&gt;
**:全コンテンツを取得&lt;br /&gt;
** async getAllKeys()&lt;br /&gt;
**:全Key(コンテンツのpath)を取得&lt;br /&gt;
** async put({idCol:path,contentBlob:blobdata})&lt;br /&gt;
**:コンテンツ(blobdata)をpathをキーにして格納(上書き) &lt;br /&gt;
* deleteCachedLayerMeta()&lt;br /&gt;
* async disableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て無効化する&lt;br /&gt;
* async enableCache()&lt;br /&gt;
*:serviceWorkerのネイティブのキャッシュ機構とSVGMapの独自キャッシュ機構を全て有効化する&lt;br /&gt;
* getCachedLayerMeta&lt;br /&gt;
* async getPostQueue()&lt;br /&gt;
*:postMessageWhenConnectedでポストをリクエストし、未完了のリクエストを取得する&lt;br /&gt;
* getRootScale()&lt;br /&gt;
*:svgMapの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]座標系における現在の表示のscaleを取得&lt;br /&gt;
* getScales()&lt;br /&gt;
*:読み込み済み文書全てのscaleを連想配列で返す(hashKeyはdocID)&lt;br /&gt;
* getVisibleLayers&lt;br /&gt;
* getStorageUsage&lt;br /&gt;
* async loadOfflineContents(contentUrlList, overwrite, progressCallBack)&lt;br /&gt;
*:-contentUrlListで指定したコンテンツをオフラインキャッシュに読み込む(自ドメイン内のコンテンツ限定)&lt;br /&gt;
*:-overwriteをtrueにすると上書きする。progressCallBackは指定した関数の第一引数に進捗状況を返却&lt;br /&gt;
* async loadZippedOfflineContents(zip_url,progressCallBack)&lt;br /&gt;
*:保存してあるディレクトリに対して、そのzipファイルの中のディレクトリ構造で、コンテンツがあるものと見做したURLもつキャッシュを形成する&lt;br /&gt;
* async postMessageWhenConnected(URL, postData, postCompleteCBF)&lt;br /&gt;
*:-postDataデータをURLにポストする　オンライン時は即座にポスト、オフライン時はいったんindexedDBにポストデータを格納後オンラインになったらポストする。&lt;br /&gt;
*:-postDataは、文字列(この場合form-data決め打ちのリクエスト)、もしくは .bodyメンバー変数を持ったオブジェクト&lt;br /&gt;
*:-この場合は .bodyはFormDataタイプのインスタンスもしくは任意のデータ、そしてfetchAPIに準じた.headers, .methodをメンバー変数に持たせることができる。(methodでGETを指定すればGETリクエストも可能)またserviceWorkerが管理する&lt;br /&gt;
* async setCachedLayerMeta&lt;br /&gt;
* setScaleTrim&lt;br /&gt;
* async updateCacheIndex()&lt;br /&gt;
&lt;br /&gt;
=====svgMapCustomLayersManager.で呼び出せるAPI=====&lt;br /&gt;
&lt;br /&gt;
'''実験的機能段階''' : &lt;br /&gt;
&lt;br /&gt;
基本的なフレームワークで提供されているレジューム機能を更に強化し、レイヤーの表示非表示状態、初期表示エリア(viewPort)等をユースケースなどに応じて複数登録、切り替えを可能とする機能を提供します。更に[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]をさらに積極的に編集し、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルに無いレイヤーを追加したり、削除したりした、カスタマイズされた[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]を差分情報の形でlocalStorageに保存・利用する機能を提供します。&lt;br /&gt;
&lt;br /&gt;
:- 以下のAPIは、SVGMapLv0.1_CustomLayersManager_r*.jsを用いた場合に使用できます。&lt;br /&gt;
:- SVGMapLv0.1_CustomLayersManager_r*.jsは、svgMapオブジェクトもつwindowで使用するとともに、svgMapオブジェクト用のカスタムレイヤーセットを構築するための別ページのwebAppsにおいても使用することができます。&lt;br /&gt;
:- 上記svgMapオブジェクト用のカスタムレイヤーセットを構築するためのwebApps用としてSVGMapCustomLayersManagerApp_r*.js、SVGMapCustomLayersManager.htmlが用意されています。&lt;br /&gt;
&lt;br /&gt;
*registCustomLayer(customLayerObject, applyImmediately, customLayerMetadata)&lt;br /&gt;
*applyCustomLayers(customLayersObject, baseLayersPropertySet)&lt;br /&gt;
*getDetailedLayersPropertySet(rootContainerDoc, ignoreIid)&lt;br /&gt;
*getDetailedLayersPropertySetFromPath(rootContainerUrl, ignoreIid)&lt;br /&gt;
*getDif( edit, orig )&lt;br /&gt;
*originalLayersProperty&lt;br /&gt;
*deepCopy(obj)&lt;br /&gt;
*deleteAllCustomLayerSettings()&lt;br /&gt;
*deleteCustomLayerSetting( key )&lt;br /&gt;
*setCustomLayerSettingIndex(key)&lt;br /&gt;
*buildCustomLayersSetting(difObj, editedLayersProperty, originalLayersProperty)&lt;br /&gt;
*loadCustomLayerSettings()&lt;br /&gt;
*storeCustomLayerSettings( settings )&lt;br /&gt;
*getElementByAttr( XMLNode , searchId , atName )&lt;br /&gt;
&amp;lt;!--*getAppliedDetailedLayersPropertySet--&amp;gt;&lt;br /&gt;
*applyCustomLayersSettingsToCurrentMapView(lpEdit, svgMapWin)&lt;br /&gt;
*loadCustomGeoViewboxes()&lt;br /&gt;
*storeCustomGeoViewboxes(customViewBoxes)&lt;br /&gt;
*buildCustomGeoViewboxSettingObject(key, title, geoViewBoxX, geoViewBoxY, geoViewBoxWidth, geoViewBoxHeight)&lt;br /&gt;
&lt;br /&gt;
====起動URLによるオプション指定====&lt;br /&gt;
svgMapフレームワークを導入したhtmlコンテンツは、URLの&amp;quot;#&amp;quot;以降であるフラグメント識別子によってフレームワークにいくつかの起動時オプションを提示することができます。&lt;br /&gt;
通常、これらのオプションは、[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]における記述で示されています。フラグメント識別子による指示はそれをオーバーライドします。&lt;br /&gt;
一般的な&amp;quot;&amp;amp;&amp;quot;による区切りで複数の複数のパラメータを指定できます。&lt;br /&gt;
=====表示範囲の指定=====&lt;br /&gt;
global座標系によって表示範囲を指示することができます。　標準のフラグメント記述に対してそれぞれ&amp;quot;global&amp;quot;文字列の追加が必要です。&lt;br /&gt;
なおglobal座標系におけるxは一般的に経度、yは一般的に緯度に対応することに留意してください。&lt;br /&gt;
*メディアフラグメントによる指定 : xywh=global:&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;&lt;br /&gt;
*svgViewフラグメントによる指定 : svgView(viewbox(global,&amp;lt;xmin&amp;gt;,&amp;lt;ymin&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
=====表示・非表示レイヤーの指定=====&lt;br /&gt;
* 表示すべきレイヤー: visibleLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 非表示すべきレイヤー: hiddenLayer=&amp;lt;layer title&amp;gt;,&amp;lt;layer title&amp;gt;...&lt;br /&gt;
* 個々のレイヤーに対するフラグメントの提示 : それぞれのレイヤーに対しては、さらにフラグメントを追加することができます。ただし&amp;quot;=&amp;quot;は&amp;quot;%3D&amp;quot;,&amp;amp;は&amp;quot;%26&amp;quot;でURLエンコードしてください。&amp;lt;layer title&amp;gt;#fragment1=val1&amp;amp;fragment2=val2　⇒&amp;lt;layer title&amp;gt;#fragment1%3Dval1%26fragment2%3Dval2　&lt;br /&gt;
&lt;br /&gt;
===レイヤー固有のUI===&lt;br /&gt;
&amp;quot;[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html#:~:text=To%20achieve%20this,everything%20in%20detail. Layers as WebApps]&amp;quot;(ウェブアプリケーションとしてのレイヤー: webApp Layer)を実現する機構　（レイヤーwebApp、webAppレイヤー、アプリレイヤー、レイヤーアプリなどと呼ぶこともある）&lt;br /&gt;
&lt;br /&gt;
====概要====&lt;br /&gt;
[[#レイヤー|レイヤーsvgコンテンツ]](フレームワークが最初に読み込むコンテナsvgコンテンツの中で埋め込まれるsvgコンテンツ)に対して、[[#動的な地図レイヤー|動的な地図レイヤー]]の一種として、そのレイヤーに固有の処理ロジックや、可視化・描画ロジック　そしてユーザインターフェースも含むことができる　htmlによるウェブアプリを定義できる機能です。&lt;br /&gt;
&lt;br /&gt;
javascriptを使った独自のロジックによる動的な可視化データの生成が実装可能です。&lt;br /&gt;
&lt;br /&gt;
また、この機能はそのレイヤーの設定やインタラクティブ操作のための表示やユーザインターフェースを地図表現とは別に表示したい場合にも用いることができます。従来のアーキテクチャでは、もしもこのようなレイヤーに固有のUIが必要だった場合でも、地図アプリケーション全体の処理や表示を司るグローバルな空間(ルートhtmlコンテンツのwindowオブジェクト直下)に、サイドエフェクトを考慮しながらコードを組み込む必要があり、結果としてコードのスパゲッティ化が懸念されました。SVGMapのレイヤー固有UIは、レイヤーごとにUIとそのロジックをカプセル化可能にし、これを排除することが可能です。(カプセル化はiframeによって行われます。)さらに、レイヤー固有UIによるウェブアプリは自律分散的な配置にも対応し、UIを備えた地図レイヤーにまでハイパーレイヤリングアーキテクチャを拡張します。&lt;br /&gt;
&lt;br /&gt;
なお、[[#動的な地図レイヤー]]は、htmlによるユーザーインターフェースを持つことができませんが、同種のウェブアプリケーションのカプセル化の効果があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このＵＩには主に二つの用途が考えられます。&lt;br /&gt;
;凡例&lt;br /&gt;
: 各レイヤーはその地図表現の意味を示すための固有の凡例を持つことがあります。その凡例を表示するために利用できます。&lt;br /&gt;
;ウェブアプリケーションによる動的な地図レイヤー&lt;br /&gt;
: 先述のように、ウェブアプリケーションによる動的な地図レイヤーは独自のロジックによってそのレイヤーの地図表現を動的に変化させる機能を備えることができます。この場合、例えばエンドユーザがFORMで入力したフィルター条件ををもとに表現を変更するようなケースも考えられます。&lt;br /&gt;
これらケースでは、そのフォームや凡例は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置することは可能ですが、もしも多くのレイヤーを表示するアプリケーションであり、それらのレイヤーがそれぞれ固有のフィルタ条件を持つような場合、[[#フレームワークの呼び出し|ルートhtml文書]]は、それぞれのレイヤーをフィルタリングするためのFORMとそのフィルタリングロジックをすべて埋め込む必要があり、画面のデザイン、およびロジックのコーディングの双方がスパゲッティ化する可能性があります。さらに、もしもこのアプリケーションに後日さらにレイヤーが追加される場合、スパゲッティ化の問題はより深刻になるかもしれません。凡例の表示についても同様の問題が考えられます。本レイヤー固有ＵＩはこのような問題に対するソリューションを提供しています。&lt;br /&gt;
&lt;br /&gt;
この機能は、ベースのフレームワークrev12以上　且つLayerUI2フレームワークを読み込み、[[#レイヤー固有のUI(後述)を設置するdiv要素|id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素]]が[[#フレームワークの呼び出し|ルートhtml文書]]に設置されているときに使用できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;サンプル&lt;br /&gt;
:[[チュートリアル#WebApp_Layer.E7.B7.A8|開発者向けチュートリアル]]でいくつかのサンプルを見ることができます。&lt;br /&gt;
&lt;br /&gt;
====[[#レイヤー|レイヤーsvgコンテンツ]]での指定====&lt;br /&gt;
レイヤー固有UIの設置には、[[#レイヤー|レイヤーsvgコンテンツ]](のルート要素(svg要素))に、data-controller属性を与え、そこにそのレイヤー固有のUIのためのhtml文書のリンク(ただしsame origin)を設置します。またサブセットとして、data-controller属性にビットイメージ(.pngもしくは.jpg, .jpeg, .gif拡張子を持つビットイメージ)へのリンクを与えることでレイヤーの凡例情報の提示をすることもできます。&lt;br /&gt;
&lt;br /&gt;
[[#レイヤー固有のUI(後述)を設置するdiv要素|レイヤー固有ＵＩの表示部位]]には、このように指定されたリソース(ビットイメージもしくはhtml)がレイヤーの選択の状況に応じて、切り替わり表示されます。レイヤーがONになっている間、それに紐付けられたレイヤー固有UI(htmkのwindowオブジェクト)が存在し続け、そのレイヤーのsvgDOMの操作やUIの提供が可能です。&lt;br /&gt;
&lt;br /&gt;
なお、標準のフレームワークでは、表示中のレイヤーの中の選択された一つのUIのみが地図のメインのwindowに配置されたiframeで表示されます。表示中ではあっても選択されていないレイヤーのUI(iframe)は非表示状態で動作しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;svg  xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
   viewBox=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot; go:dataArea=&amp;quot;9000.0 -9000.0 9000.0 9000.0&amp;quot;&lt;br /&gt;
   '''data-controller=&amp;quot;../Self-GS-POI_controller.html&amp;quot;'''&amp;gt;&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====レイヤー固有のUIのためのhtml文書(webApp)の構造・作法====&lt;br /&gt;
レイヤー固有のUIとなるhtml文書は、下記の通り、その初期化等を行うライブラリ &amp;lt;code&amp;gt;svgMapLayerLib.js&amp;lt;/code&amp;gt; を読み込む必要があります。（現在のところ通常のjavascriptライブラリのみ提供されます）&lt;br /&gt;
CDNからライブラリを読む場合は、&amp;lt;code&amp;gt;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;lt;/code&amp;gt;です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''サンプル'''&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/gh/svgmap/svgmapjs@latest/svgMapLayerLib.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====詳細====&lt;br /&gt;
* レイヤー固有UIは、SVGMapのグローバルなwindowに設置されたiframeの中で動作します。このiframeではデフォルトで組み込まれる下記APIを通して、そのレイヤーのSVG DOMをはじめとしたSVGMapの各種リソースへのアクセスが可能です。&lt;br /&gt;
** アクセスが可能になるのは、&amp;quot;load&amp;quot;イベント・onload段階以降です。&lt;br /&gt;
* [[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]が設置されたSVGMapのグローバルなwindowと異なるドメインにレイヤーを設置し、そのレイヤーがレイヤー固有UIを持つこともできます。ただし適切なCORS設定が必要であるとともに、一部のAPIの使用に注意が必要になります。(下記cotrollerSrc参照)&lt;br /&gt;
* [[#レイヤー|レイヤーsvgコンテンツ]]のドキュメントルート要素へdata-controller属性を設定する代わりに、コンテナsvgコンテンツにおける[[#レイヤー|レイヤーsvgコンテンツ]]への参照要素にdata-controller属性を設定することもできます。&lt;br /&gt;
* data-controller属性の代わりに、data-controller-src属性の値に、適切にエスケープすることで直接htmlを記述することもできます。&lt;br /&gt;
* data-controller属性によって参照されるhtmlコンテンツでは、次節[[#拡張API]]で説明する値や関数が使用できます。&lt;br /&gt;
* data-controller属性のURLには以下のオプションをフラグメント識別子として指定することができます。&lt;br /&gt;
** #exec=appearOnLayerLoad||hiddenOnLayerLoad||onClick レイヤー固有UIの起動オプション&lt;br /&gt;
*** appearOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIが出現&lt;br /&gt;
*** hiddenOnLayerLoad : レイヤーを表示状態にすると即座にレイヤ固有UIがhidden状態で起動(そのレイヤ固有UIに含まれるscriptが起動)&lt;br /&gt;
*** onClick : レイヤー固有UI起動ボタン&amp;quot;&amp;gt;&amp;quot;を押したときにレイヤ固有UIが出現(デフォルト)&lt;br /&gt;
** #requiredHeight=hhh&amp;amp;requiredWidth=www&lt;br /&gt;
*** id=&amp;quot;layerSpecificUI&amp;quot;のdiv要素のcss値に関わらず、requiredHeight、requiredWidthでiframeの表示を指示&lt;br /&gt;
* 下記APIはレイヤー固有UIのiframeが生成された直後はアクセスできません。(アクセス可能になるまでタイムラグがあります)　ただし、2021/6/24のリリースから、onload(load)段階でアクセス可能になりました。&lt;br /&gt;
** 初期化時には、&amp;lt;code&amp;gt;addEventListener(&amp;quot;load&amp;quot;,初期化関数)&amp;lt;/code&amp;gt;　もしくは &amp;lt;code&amp;gt;onload=function(){初期化処理}&amp;lt;/code&amp;gt;　等として利用してください。&lt;br /&gt;
&lt;br /&gt;
====拡張API====&lt;br /&gt;
レイヤー固有UI(iframeのwindowオブジェクトのjavascriptコード)では以下のAPIが拡張されています。&lt;br /&gt;
=====イベント=====&lt;br /&gt;
*openFrame : そのiframeが、新たに生成された&lt;br /&gt;
*closeFrame : 同、消滅した&lt;br /&gt;
*hideFrame : 同、隠された&lt;br /&gt;
*appearFrame : 同、隠されていたのが再度現れた&lt;br /&gt;
*zoomPanMap : [[#.E6.8B.A1.E5.BC.B5.E3.82.A4.E3.83.99.E3.83.B3.E3.83.88|SVGMapフレームワークと同じ]]&lt;br /&gt;
*zoomPanMapCompleted : 同上&lt;br /&gt;
*screenRefreshed : 同上&lt;br /&gt;
&lt;br /&gt;
=====svgImageProps=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVGの各種プロパティを参照できる（基本的に全て読み出しのみ） (参考:[[#svgImagesProps.5B.5D]])&lt;br /&gt;
*[[解説書#svgImagesProps.5B.5D|プロパティのリストはこちらを参照]]&lt;br /&gt;
*svgImageProps.scriptで、動的地図レイヤーのscript要素によって生成されたオブジェクトにもアクセスできます。&lt;br /&gt;
*svgMap.getSvgImagesProps(layerID) で得た値と同等。&lt;br /&gt;
*.hashは書き込みが有効(参考 [[#サブレイヤーパーマリンク]])&lt;br /&gt;
&lt;br /&gt;
=====svgImage=====&lt;br /&gt;
このレイヤー固有UIに紐づいたレイヤーSVG文書(DOM Documentオブジェクト) (参考：[[#svgImages.5B.5D]])&lt;br /&gt;
*このドキュメントを操作することで、そのレイヤーの表示を動的に変化させることが可能です。&lt;br /&gt;
*特に、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意して実装してください]]&lt;br /&gt;
*svgMap.getSvgImages(layerID) で得た値と同等。&lt;br /&gt;
&lt;br /&gt;
=====svgMap=====&lt;br /&gt;
svgMapフレームワークインスタンス&lt;br /&gt;
=====layerID=====&lt;br /&gt;
* svgMapフレームワークが管理しているSVG文書ハッシュリスト(svgMap.getSvgImages())における、このレイヤー固有UIに紐づいたレイヤーSVG文書のハッシュキー&lt;br /&gt;
* [[#getLayerId]]参照&lt;br /&gt;
&lt;br /&gt;
=====svgMapGIStool=====&lt;br /&gt;
GIStoolsフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapGIStool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapGIStoolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====svgMapAuthoringTool=====&lt;br /&gt;
svgMapAuthoringToolフレームワークを拡張した時、同インスタンス&lt;br /&gt;
*[[解説書#svgMapAuthoringTool..E3.81.A7.E5.91.BC.E3.81.B3.E5.87.BA.E3.81.9B.E3.82.8BAPI|svgMapAuthoringToolが持つAPI]]&lt;br /&gt;
&lt;br /&gt;
=====controllerSrc=====&lt;br /&gt;
レイヤー固有UIのiframeの起動に使われたsrc属性(レイヤー固有UIのパス・URL)が読み出せます。特にレイヤーが異なるドメインから配信されたものの場合、レイヤー固有UIのwindowのlocation属性(及びそれによるURL解決を行うAPI)からは適切な情報が得られません。これ代えてこの値が使用できるケースがあるでしょう。&lt;br /&gt;
=====putGlobalMessage(messageText)=====&lt;br /&gt;
messageTextを[[#グローバルメッセージ]]エリアに表示する　レイヤーが消滅したら自動でメッセージも消滅します。&lt;br /&gt;
=====preRenderFunction=====&lt;br /&gt;
この名前の関数を(レイヤー固有UIのwindowに)定義すると、そのレイヤーのSVG文書の再描画(画面更新)シーケンスの直前にこの関数の内容が実行される。詳細は[[解説書#setPreRenderController|setPreRenderControllerを参照]]&lt;br /&gt;
&lt;br /&gt;
=====customHitTester=====&lt;br /&gt;
この名前の関数を定義すると、そのレイヤーに固有のヒットテスト（マウスやタッチによって地図上をヒットしたときの振る舞い）機能を追加することができます。ヒットテストは通常のクリッカブルオブジェクト（ポイントやライン・ポリゴンなど）のそれと同等に扱われます。&lt;br /&gt;
* customHitTester( position )&lt;br /&gt;
** 第一引数に、ヒットされた座標(.screenX,Y:window上の座標、.lat,lng:地理座標、.isMapCenterHitTest:後述)が与えられます。（この値をもとに実際のヒットテスト処理を書く）　この関数の帰り値が'''null'''や'''undefined'''の場合はヒットしなかったこと、'''true'''もしくは文字列もしくはそのレイヤーの任意の図形要素、もしくはそれらの配列の場合はヒットしたことを示します。&lt;br /&gt;
*** isMapCenterHitTestが'''true'''の場合、そのヒットテストは伸縮スクロール時自動発生するケースで発生したものです。（もしこのケースでのテストを除外したいなど特別な処理をしたい場合に利用できます）&lt;br /&gt;
** ヒットテスト後の振る舞いも通常のクリッカブルオブジェクトと同等で、通常はデフォルトで備えるヒットされたグラフィックスオブジェクトの[[#metadata.E3.83.95.E3.83.AC.E3.83.BC.E3.83.A0.E3.83.AF.E3.83.BC.E3.82.AF|メタデータ]]表示パネルが呼び出されます。(帰り値が図形要素の場合）　もしこの振る舞いを変更したい場合は、[[#setShowPoiProperty|setShowPoiProperty]]を用いることが可能です。&lt;br /&gt;
** 帰り値がtrue、文字列、およびそれらの配列を返す場合は、[[#setShowPoiProperty|setShowPoiProperty]]を使用してカスタマイズされた処理を行う必要があります。この場合[[#setShowPoiProperty|setShowPoiProperty]]で設定された関数が受け取る引数は、そのSVG文書のドキュメントルート要素であり、その'''&amp;quot;data-hitTestIndex&amp;quot;'''属性に選択されたオブジェクトのインデックス(配列の場合。配列でない場合は常に0)が設定されます。&lt;br /&gt;
&lt;br /&gt;
====サブレイヤーパーマリンク====&lt;br /&gt;
(2024/10のdev1ブランチから有効)&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLが任意のフラグメント識別子を持つことができる。&lt;br /&gt;
*ただしフラグメント識別子はカンマ&amp;quot;,&amp;quot;、アンパサンド&amp;quot;&amp;amp;&amp;quot;を含めることはできない。&lt;br /&gt;
*[[#レイヤー固有のUI]]が以下を実装する場合、任意のレイヤーの設定をパーマリンク([[#getBasicPermanentLink]])に反映できる。&lt;br /&gt;
**[[#レイヤー固有のUI]]は起動時(onload)同フラグメント識別子の情報を解釈し適切な状態に変化させる機能&lt;br /&gt;
**[[#レイヤー固有のUI]]は、パーマリンクによる指定に対応した標示状態に表示が切り替わるタイミングで[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子の内容をそれに対応した値に変更する機能&lt;br /&gt;
*[[#レイヤーsvgコンテンツ]]のURLのフラグメント識別子は、[[#svgImageProps]].hashを設定することで変更できる ([[#svgImageProps|⇒仕様参照]])&lt;br /&gt;
&lt;br /&gt;
===動的な地図レイヤー===&lt;br /&gt;
svgドキュメントにjavascriptを記述することでも、動的なデータ生成を実装可能としています。&lt;br /&gt;
本フレームワークでは、svgドキュメント中に&amp;lt;script&amp;gt;要素を一つだけ記述することができ、その要素の中にjavascriptコードを入れることができます。&lt;br /&gt;
&lt;br /&gt;
DOMを操作し、動的に描画を変化させることが可能です。ただし、[[解説書#.E5.8B.95.E4.BD.9C.E3.81.AE.E5.88.B6.E9.99.90.E3.83.BB.E5.B7.AE.E7.95.B0|動作の制限に注意してください]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====動的SVGMapコンテンツで利用可能な拡張API====&lt;br /&gt;
一般のjavascriptAPIに加えて、動的な地図レイヤーを実装するために以下のAPIが提供されます。（既存のものでも注記があるものも列挙）&lt;br /&gt;
*document: このsvgMapドキュメント自身&lt;br /&gt;
*READ ONLY変数&lt;br /&gt;
**CRS:このドキュメントのCRS : CRS.a....fに、地理座標からこのドキュメントのSVGユーザ座標への変換係数が提供される&lt;br /&gt;
**docId:このSVGドキュメントのdocId&lt;br /&gt;
**scale：倍率：このドキュメントの座標系と、画面の(px座標系)との間の倍率(この値は等倍が1.0だが、svgMapコンテンツのvisibleMin/MaxZoom値は%(等倍は100)なので注意)&lt;br /&gt;
**actualViewBox：このドキュメントの座標系でのviewBox&lt;br /&gt;
**geoViewBox：地理座標におけるviewBox&lt;br /&gt;
**geoViewport&lt;br /&gt;
**viewport&lt;br /&gt;
**this.location:相対パス&lt;br /&gt;
**(this.verIE)&lt;br /&gt;
*refreshScreen(): 描画の更新を明示: refreshScreenを用いていない場合、そのレイヤーのDOMを編集してもそれが即座に表示に反映(更新)するとは限りません。文書のロード、ズーム、スクロールのときが表示のDOMの内容を反映した画面の自動更新のタイミングです。それ以外、多くの場合反映されません（性能確保のための本フレームワークの現在の制限）。DOMO編集をそれ以外のタイミングで表示に反映したい場合、この関数の呼び出しを行うひつようがあります。一方不必要にこの関数を呼び出すとシステム全体の性能が低下するかもしれません。&lt;br /&gt;
*transform()&lt;br /&gt;
*getCanvasSize()&lt;br /&gt;
*linkedDocOp()&lt;br /&gt;
*isIntersect()&lt;br /&gt;
*drawGeoJson()&lt;br /&gt;
*childDocOp()&lt;br /&gt;
*onload:この関数を設定すると、ロードされると呼ばれる(ドキュメントロード後、描画前のタイミング。)&lt;br /&gt;
** この関数は、DOMトラバース前に同期処理される。&lt;br /&gt;
**したがってonloadで実行される処理はその中が非同期でない限り、refreshScreen()しなくてもonload時のDOM編集は直後の描画に反映される。&lt;br /&gt;
*onscroll:この関数を設定すると、スクロールされるとき呼ばれる（ほかにズーム以外で画面更新時も）(スクロール後の描画前のタイミング。)&lt;br /&gt;
**同上&lt;br /&gt;
*onzoom:この関数を設定すると、ズーミングが発生するとき呼ばれる(同上)&lt;br /&gt;
&lt;br /&gt;
====拡張イベント====&lt;br /&gt;
*document -&amp;gt; zoomPanMap イベント addEventHandlerすると、ズームパンが起き(viewPortが変化したとき)地図システム全体の描画が完了(含タイムアウト)後に発行される。SVGMap*.jsが地図をウェブアプリ起動後、最初に描画完了した時にもこのイベントが発生する。（レイヤー追加時には発生しない）&lt;br /&gt;
**これをイベントリスナに設定した関数は、非同期に実行される。onscroll()と異なり、もしその関数でDOM編集を行った場合は、直後の描画にそれが反映される保証がない。refreshScren()による再描画が必要。&lt;br /&gt;
*document -&amp;gt; screenRefreshed イベント addEventHandlerすると、ズームパン以外で地図システム全体の描画が完了(含タイムアウト)後に発行される。主にrefreshScreen()など。このイベントをフックにして、SVGMapコンテンツのDOM操作・再描画（refreshScreen()）を行うと無限ループに陥るので使用方法に注意が必要。&lt;br /&gt;
*document -&amp;gt; zoomPanMapCompleted イベント SVGMaplayerUIが有効な時に発行される。　zoomPanMapイベントは伸縮スクロール完了時に発行されるが、その直後にレイヤー固有UIにおいて(XHRやfetchを用いた)非同期なデータ取得とレイヤー書き換えが生じるケースでは、その完了を検知しない。zoomPanMapCompleted イベントはこのような非同期通信の完了後に発行される。&lt;br /&gt;
&lt;br /&gt;
===SVGMapの埋め込み(SVGMapFrame)===&lt;br /&gt;
'''実験的機能段階''' :&lt;br /&gt;
&lt;br /&gt;
SVGMapフレームワークはwindow全体に地図コンテンツが占有される形で表示する設計です。ウェブページはwebAppsとしてカプセル化されたレイヤーをsvgMapオブジェクトに差し込む形でアプリケーションが構築されます。すなわち、基本的に[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|グローバル空間]]windowにはsvgMapオブジェクトだけが単独で存在し、その他のアプリケーションをwindow上に実装する場合は、その開発者がsvgMapオブジェクトとのグローバル空間でのスパゲッティ化に注意を払いながら開発していく必要があります。&lt;br /&gt;
&lt;br /&gt;
それに対して、''SVGMapLv0.1_Frame*.js''が提供する機能は、window内の指定した領域にsvgMapによる地図を埋め込むことを可能にします。さらにこの埋め込まれたsvgMapオブジェクトを　外部からより簡単に操作できるようカプセル化されたインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ライブラリ====&lt;br /&gt;
SVGMapを埋め込むウェブページでは''SVGMapLv0.1_Frame*.js''を導入します。&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====svg-map要素====&lt;br /&gt;
&lt;br /&gt;
svg-mapカスタム要素を使用してsvgMapオブジェクトを任意の場所に埋め込むことができます。&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;!doctype html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;SVGMapLv0.1_Frame_r4.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      説明用地図&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/svg-map&amp;gt;&lt;br /&gt;
     &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====属性=====&lt;br /&gt;
======svgMapAppPage======&lt;br /&gt;
必須属性: 起動するSVGMapLv0.1*.jsが組み込まれたhtmlを指定。&lt;br /&gt;
svg-map要素はshadow domとなっており、内部はひとつのiframeとして構成されます。このiframe内のwindowで通常のsvgMapオブジェクトが稼働する形となります。svgMapAppPage属性はこのiframe内で起動するsvgMapオブジェクトを持ったhtmlを指定するものです。&lt;br /&gt;
&lt;br /&gt;
======latitude, longitude======&lt;br /&gt;
オプション: 表示領域を下記の属性と組み合わせて指定します。DOMを操作することによって動的に表示領域を変更することが可能です。&lt;br /&gt;
======zoom======&lt;br /&gt;
オプション: 表示位置の中心点を上の2属性で、ズームレベルをこの属性で指定します。ズームレベルの定義は[https://docs.microsoft.com/ja-jp/azure/azure-maps/zoom-levels-and-tile-grid webMercatorタイルピラミッドのレベル番号]（ただし小数点指定も可能）&lt;br /&gt;
======latitude2, longitude2======&lt;br /&gt;
オプション: latitude, longitudeと組み合わせて対角線を指定し表示領域を設定します。&lt;br /&gt;
======customjson======&lt;br /&gt;
オプション: 任意のJSON文字列を(エスケープしたうえで)与えることができます。 SVGMap.jsのあるiframeのwindow.rootMessage.customJsonに、JSON.parseされたうえでその値が反映されます。この値もDOM操作により動的に反映されます。window.rootMessage.customJsonの変化を監視できるようsetterを設けることで動的な変化に対応する実装が可能です。&lt;br /&gt;
&lt;br /&gt;
 var rootMessage={&lt;br /&gt;
  set customJson(json){&lt;br /&gt;
   ...&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
======layerui======&lt;br /&gt;
オプション: レイヤーUIの出力要素をxlinkで指定します。　この値はmutationをobserveしていません（svg-mapオブジェクトが生成された、最初の一回のみ有効です）&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;svg-map svgMapAppPage=&amp;quot;SVGMapper_r16_layerUICustom.html&amp;quot; id=&amp;quot;svgMapTag&amp;quot; latitude=&amp;quot;37&amp;quot; longitude=&amp;quot;135&amp;quot; zoom=&amp;quot;4&amp;quot; layerui=&amp;quot;#layerUIarea&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====DOM API=====&lt;br /&gt;
======setCenter======&lt;br /&gt;
setCenter( longitude, latitude, zoom ) : 緯度経度ズームレベルで地図を表示させる&lt;br /&gt;
======addLayer======&lt;br /&gt;
addLayer(url,title,visibility) : URLで指定したリソースのレイヤーをtitleを付けて追加する&lt;br /&gt;
&lt;br /&gt;
======svgMapObject======&lt;br /&gt;
getter svgMapObject : この要素に紐付いたsvgMapオブジェクトを得る&lt;br /&gt;
&lt;br /&gt;
====layer要素====&lt;br /&gt;
svg-map要素の子要素として、任意の個数のlayer要素を設置できます。&lt;br /&gt;
=====属性=====&lt;br /&gt;
======title======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤー名(title)を指定し、そのレイヤーとlayer要素を紐付ける。該当するレイヤーが無く、且つ下記のsrcが指定されている場合は新しいレイヤーを追加する。なお、任意の属性や子ノードが与えられている場合は、下記の通りレイヤーの読み込み後にそれらの値が該当するレイヤーの[[#ウェブアプリケーションによる動的な地図レイヤーと、そのハイパーレイヤリング|data-controller]]の window.rootMessageに設定される。&lt;br /&gt;
&lt;br /&gt;
======src======&lt;br /&gt;
iframeで起動されるsvgMapオブジェクトの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]ファイルにある、レイヤーをURLを使って指定する&lt;br /&gt;
======visibility [TBD] ======&lt;br /&gt;
visible もしくは hiddenを設定すると、そのレイヤーの表示状態を制御できる。&lt;br /&gt;
&lt;br /&gt;
======任意の属性======&lt;br /&gt;
任意の属性を設定できる。設定した属性名と属性値は、対応するレイヤーの[[#レイヤー固有ユーザインターフェース|data-controller]]で指定されたレイヤーのコントローラのwindowにおけるwindow.rootMessageの対応するメンバ変数に反映される。[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/set setter]を設定することで変化に応じて動作させることが可能になる。&lt;br /&gt;
&lt;br /&gt;
======rootMessage.update()関数======&lt;br /&gt;
レイヤーのコントローラのwindow.rootMessage.update()関数(引数なし)が定義されている場合、上記の属性変更(最初の設定も含む)が検知される度にこの関数が呼び出される。&lt;br /&gt;
&lt;br /&gt;
=====子ノード(TEXT CONTENTやXML要素)=====&lt;br /&gt;
任意のテキスト(textContent)や、XML要素(xmlContent)を子ノードに入れることができる。&lt;br /&gt;
入れられた情報は、同様に対応するレイヤーのdata-controllerの&lt;br /&gt;
window.rootMessage.textContent、もしくはwindow.rootMessage.xmlContentメンバ変数に反映される。&lt;br /&gt;
XMLに関しては任意の階層化がされていても良い。DOM操作による変化があれば更新されるので、同様にsetterを用いて変化を反映させることが可能。&lt;br /&gt;
&lt;br /&gt;
=====DOMAPI=====&lt;br /&gt;
======layerId======&lt;br /&gt;
layerId : このレイヤーのレイヤーIDを得る&lt;br /&gt;
======svgImage======&lt;br /&gt;
svgImage : このレイヤーに紐付いたsvgMapコンテンツ(document)を得る&lt;br /&gt;
======svgImageProps======&lt;br /&gt;
svgImageProps : このレイヤーに紐づいたsvgMapコンテンツのsvgImagePropsオブジェクト(各種プロパティを格納したオブジェクト)を得る&lt;br /&gt;
======controllerWindow======&lt;br /&gt;
controllerWindow : (もしあれば)このレイヤーに紐づいたsvgMapコンテンツのレイヤー固有UIを得る&lt;br /&gt;
&lt;br /&gt;
==第四章：内部機構解説==&lt;br /&gt;
[[内部機構解説|別ページを参照してください。]]&lt;br /&gt;
&lt;br /&gt;
==第五章：付加機能==&lt;br /&gt;
===3D可視化機能===&lt;br /&gt;
:- SVGMap.jsはCesium.jsを利用してSVGMapで表示しているレイヤーを3D可視化することができます。&lt;br /&gt;
:- 3D可視化はSVGMap.jsの地図ウィンドと独立した別ウィンドで行われます。&lt;br /&gt;
:- すなわち、ここから呼び出されるCesiumベースの3D可視化ウェブアプリは、それ専用のwebApps([https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4_module.js cesiumWindow*.js]を読み込んだアプリ。：基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]を用意)を持つ別のブラウジングコンテキストで起動されます。&lt;br /&gt;
:- この3D可視化ウェブアプリは、svgmapjsとメッセージングを行いsvgmapjsで表示されているレイヤーを3D可視化します。&lt;br /&gt;
&lt;br /&gt;
====3Dビジュアライザ起動用ボタンの設置====&lt;br /&gt;
3D可視化機能を起動するためのUI(ボタン)は、[[#フレームワークの呼び出し|ルートhtml文書]]に設置した以下の要素によって構築されます。&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;img id=&amp;quot;3DviewButton&amp;quot; data-app=&amp;quot;cesiumWindow4.html&amp;quot; .../&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;が&amp;lt;code&amp;gt;3DviewButton&amp;lt;/code&amp;gt;である必要があります。&lt;br /&gt;
* &amp;lt;code&amp;gt;data-app&amp;lt;/code&amp;gt;属性で、3D可視化ウェブアプリのパスを指定することが可能です。&lt;br /&gt;
** もし指定されていない場合は、ルートhtml文書と同一ディレクトリの&amp;lt;code&amp;gt;cesiumWindow2.html&amp;lt;/code&amp;gt;というファイルがデフォルトで指定されます。&lt;br /&gt;
** パスは同一オリジンである必要があります。&lt;br /&gt;
** 基本的な3D可視化ウェブアプリとして、[https://github.com/svgmap/svgmapjs/blob/main/3D_extension/cesiumWindow4.html cesiumWindow4.html]が[https://github.com/svgmap/svgmapjs/ svgmapjsリポジトリ]に用意されています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* openCesium(callBackFunc)&lt;br /&gt;
*:cesiumのオブジェクトが構築されるのを待ちつつcesiumのwindowをオープンする。 callBackFuncがある場合は、cesiumWindowが準備されたらそれを実行する&lt;br /&gt;
* visualizeCurrentSvgMap(complex)&lt;br /&gt;
*:3D可視化ボタンを押したときに最初に呼び出される関数 complex:&amp;quot;true&amp;quot;の場合POIのバーグラフ化を行う&lt;br /&gt;
* getCesiumWindow()&lt;br /&gt;
*:連携用CesiumビジュアライザーのWindowオブジェクトを取得&lt;br /&gt;
* setCesiumWindowHtmlLocation(path)&lt;br /&gt;
*:pathで連携Cesiumビジュアライザーを指定する&lt;br /&gt;
**連携用Cesiumビジュアライザーの説明&lt;br /&gt;
**:連携用ライブラリcesiumWindow*.jsが読み込まれた、WebApps(htmlコンテンツ)&lt;br /&gt;
**:reldir2imageUrlグローバル変数に、SVGMapコンテンツの[[#SVGMapコンテンツを配置するためのdiv要素|コンテナsvgコンテンツ]]のあるディレクトリを指定&lt;br /&gt;
**:directURLlistで[[#.E3.83.97.E3.83.AD.E3.82.AD.E3.82.B7.E3.81.AE.E8.A8.AD.E5.AE.9A|プロキシ]]へ接続しなくて良いデータのURLのキーワードを指定&lt;br /&gt;
**:cesiumProxyURLでプロキシ―サーバの相対パスを指定(cesiumはビットイメージデータもCORに則ったコンテンツでないと読み込めないため)&lt;br /&gt;
**:cesiumWindow*.jsは上記のパスの後に、取得すべきコンテンツのURLを単純に文字列として追加してプロキシにリクエストを出す&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2381</id>
		<title>リンク集</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2381"/>
		<updated>2026-01-08T00:05:45Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Slides */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==メディア掲載記事==&lt;br /&gt;
*[https://news.mynavi.jp/article/20240621-2970589/ 「SVGMap」とは？ ハイパーレイヤリングを使った災害情報表示システム] : 基本設計理念の解説記事 (2024年6月)&lt;br /&gt;
&lt;br /&gt;
==スライド動画==&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/index_HLA_breakout.html W3C TPAC2025 ハイパーレイヤリングアーキテクチャ ブレークアウトセッション]&lt;br /&gt;
*[https://svgmap.org/movie/AC2024/ W3C AC2024 防災×WWW / SVGMap セッション]&lt;br /&gt;
&lt;br /&gt;
==解説音声==&lt;br /&gt;
*[https://svgmap.org/movie/address/ ハイパーレイヤリングアーキテクチャについて]&lt;br /&gt;
*[https://svgmap.org/movie/address/LaWA.html Layers as Web Apps (LaWA)について]&lt;br /&gt;
&lt;br /&gt;
==Slides==&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/crs-and-svg SVGにおける、(地理)空間参照系(CRS(Coordinate Reference System))]&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/tiling-51301496 SVGMapのタイリングアーキテクチャ]&lt;br /&gt;
*[https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-for-web-mapping-in-japanese タイリングアーキテクチャ詳細解説]&lt;br /&gt;
*SVGMapのLevel of Detail(縮尺に応じたコンテンツ制御)アーキテクチャ&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-ofdetail Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-of-detail-2 Part2]&lt;br /&gt;
*SVGMap全体のプレゼン資料&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20110311-takagi Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20120525-takagi Part2]&lt;br /&gt;
**[https://github.com/satakagi/TPAC2019-docs/blob/master/MAP.md W3C TPAC2019 MapCG slide]&lt;br /&gt;
* [https://satakagi.github.io/mapsForWebWS2020-docs/imgs/W3C%20TPAC2022%20Maps4HTMLtalk%20Satakagi.html W3C TPAC2022 Maps4HTML meeting talk - slide]&lt;br /&gt;
** [https://svgmap.org/slides/W3C%20TPAC2022%20Maps4HTMLtalk(JP).pdf 日本語版・増補版]&lt;br /&gt;
&lt;br /&gt;
==Demos==&lt;br /&gt;
*[https://svgmap.org/ svgmap.orgホームページで案内されています]&lt;br /&gt;
&lt;br /&gt;
==goSVG技術解説書(SVGMapの旧称)==&lt;br /&gt;
* gコンテンツ流通推進協議会(オリジナル:ドメイン廃止：リンク切れ) &amp;lt;!-- https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf --&amp;gt;&lt;br /&gt;
* [https://web.archive.org/web/20071012194715/https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf Internet Archive ミラー]&lt;br /&gt;
&lt;br /&gt;
==JIS規格 (X 7197：2012)==&lt;br /&gt;
*[http://kikakurui.com/x7/X7197-2012-01.html SVGMapのJIS規格書のhtml版(kikakurui.com)] &lt;br /&gt;
*[https://webdesk.jsa.or.jp/books/W11M0090/index/?bunsyo_id=JIS+X+7197%3A2012 同日本規格協会の規格書プレビュー＆購入ページ]&lt;br /&gt;
*SVGにおける地図の表現及びサービスJIS原案の概要（gコンテンツ流通推進協議会:ドメイン廃止:リンク切れ) &amp;lt;!-- https://www.g-contents.jp/filedown.php?item1=4&amp;amp;item2=11&amp;amp;page=370&amp;amp;type=1&amp;amp;mode=disp&amp;amp;admin=1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==論文等==&lt;br /&gt;
*[https://satakagi.github.io/mapsForWebWS2020-docs/ mapsForWebWS2020-docs]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/position.html position statement]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html Decentralized Web Mapping]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html Quad Tree Composite Tiling and the standardization of tiling]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/update202110.html Update on SVGMap from Fall 2020 to October 2021]&lt;br /&gt;
&lt;br /&gt;
==W3C Activities==&lt;br /&gt;
*[https://www.w3.org/submissions/2011/04/ Tiling and Layering Module for SVG Member Submission]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/HyperLayeringArchitectureCommunityReport.html Hyper-Layering CG Report on Maps for HTML CG]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/minimalMapModel.html Minimal Map Model CG Report on Maps for HTML CG]&lt;br /&gt;
==[https://discourse.wicg.io/c/web-mapping/22 discourse.wicg.io]==&lt;br /&gt;
*[https://discourse.wicg.io/t/vector-tiling-on-svgmap/3135/6 Vector Tiling on SVGMap]&lt;br /&gt;
&lt;br /&gt;
==[http://svg2.mbsrv.net/devinfo/index.html このサイトの SVGMap関係リソースのインデックス]==&lt;br /&gt;
===[[OpenStreetMapデータからレイヤーを作成する]]===&lt;br /&gt;
===[[クロスオリジンアクセス]]===&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2380</id>
		<title>リンク集</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2380"/>
		<updated>2026-01-08T00:04:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* 論文 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==メディア掲載記事==&lt;br /&gt;
*[https://news.mynavi.jp/article/20240621-2970589/ 「SVGMap」とは？ ハイパーレイヤリングを使った災害情報表示システム] : 基本設計理念の解説記事 (2024年6月)&lt;br /&gt;
&lt;br /&gt;
==スライド動画==&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/index_HLA_breakout.html W3C TPAC2025 ハイパーレイヤリングアーキテクチャ ブレークアウトセッション]&lt;br /&gt;
*[https://svgmap.org/movie/AC2024/ W3C AC2024 防災×WWW / SVGMap セッション]&lt;br /&gt;
&lt;br /&gt;
==解説音声==&lt;br /&gt;
*[https://svgmap.org/movie/address/ ハイパーレイヤリングアーキテクチャについて]&lt;br /&gt;
*[https://svgmap.org/movie/address/LaWA.html Layers as Web Apps (LaWA)について]&lt;br /&gt;
&lt;br /&gt;
==Slides==&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/crs-and-svg SVGにおける、(地理)空間参照系(CRS(Coordinate Reference System))]&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/tiling-51301496 SVGMapのタイリングアーキテクチャ]&lt;br /&gt;
*[https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-for-web-mapping-in-japanese タイリングアーキテクチャ詳細解説]&lt;br /&gt;
*SVGMapのLevel of Detail(縮尺に応じたコンテンツ制御)アーキテクチャ&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-ofdetail Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-of-detail-2 Part2]&lt;br /&gt;
*SVGMap全体のプレゼン資料&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20110311-takagi Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20120525-takagi Part2]&lt;br /&gt;
**[https://github.com/satakagi/TPAC2019-docs/blob/master/MAP.md W3C TPAC2019 MapCG slide]&lt;br /&gt;
* [https://satakagi.github.io/mapsForWebWS2020-docs/imgs/W3C%20TPAC2022%20Maps4HTMLtalk%20Satakagi.html W3C TPAC2022 Maps4HTML meeting talk - slide]&lt;br /&gt;
** [https://svgmap.org/slides/W3C%20TPAC2022%20Maps4HTMLtalk(JP).pdf 日本語版・増補版]&lt;br /&gt;
&lt;br /&gt;
==goSVG技術解説書(SVGMapの旧称)==&lt;br /&gt;
* gコンテンツ流通推進協議会(オリジナル:ドメイン廃止：リンク切れ) &amp;lt;!-- https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf --&amp;gt;&lt;br /&gt;
* [https://web.archive.org/web/20071012194715/https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf Internet Archive ミラー]&lt;br /&gt;
&lt;br /&gt;
==JIS規格 (X 7197：2012)==&lt;br /&gt;
*[http://kikakurui.com/x7/X7197-2012-01.html SVGMapのJIS規格書のhtml版(kikakurui.com)] &lt;br /&gt;
*[https://webdesk.jsa.or.jp/books/W11M0090/index/?bunsyo_id=JIS+X+7197%3A2012 同日本規格協会の規格書プレビュー＆購入ページ]&lt;br /&gt;
*SVGにおける地図の表現及びサービスJIS原案の概要（gコンテンツ流通推進協議会:ドメイン廃止:リンク切れ) &amp;lt;!-- https://www.g-contents.jp/filedown.php?item1=4&amp;amp;item2=11&amp;amp;page=370&amp;amp;type=1&amp;amp;mode=disp&amp;amp;admin=1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==論文等==&lt;br /&gt;
*[https://satakagi.github.io/mapsForWebWS2020-docs/ mapsForWebWS2020-docs]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/position.html position statement]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html Decentralized Web Mapping]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html Quad Tree Composite Tiling and the standardization of tiling]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/update202110.html Update on SVGMap from Fall 2020 to October 2021]&lt;br /&gt;
&lt;br /&gt;
==W3C Activities==&lt;br /&gt;
*[https://www.w3.org/submissions/2011/04/ Tiling and Layering Module for SVG Member Submission]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/HyperLayeringArchitectureCommunityReport.html Hyper-Layering CG Report on Maps for HTML CG]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/minimalMapModel.html Minimal Map Model CG Report on Maps for HTML CG]&lt;br /&gt;
==[https://discourse.wicg.io/c/web-mapping/22 discourse.wicg.io]==&lt;br /&gt;
*[https://discourse.wicg.io/t/vector-tiling-on-svgmap/3135/6 Vector Tiling on SVGMap]&lt;br /&gt;
&lt;br /&gt;
==[http://svg2.mbsrv.net/devinfo/index.html このサイトの SVGMap関係リソースのインデックス]==&lt;br /&gt;
===[[OpenStreetMapデータからレイヤーを作成する]]===&lt;br /&gt;
===[[クロスオリジンアクセス]]===&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2379</id>
		<title>リンク集</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2379"/>
		<updated>2026-01-07T23:53:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* スライド動画 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==メディア掲載記事==&lt;br /&gt;
*[https://news.mynavi.jp/article/20240621-2970589/ 「SVGMap」とは？ ハイパーレイヤリングを使った災害情報表示システム] : 基本設計理念の解説記事 (2024年6月)&lt;br /&gt;
&lt;br /&gt;
==スライド動画==&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/index_HLA_breakout.html W3C TPAC2025 ハイパーレイヤリングアーキテクチャ ブレークアウトセッション]&lt;br /&gt;
*[https://svgmap.org/movie/AC2024/ W3C AC2024 防災×WWW / SVGMap セッション]&lt;br /&gt;
&lt;br /&gt;
==解説音声==&lt;br /&gt;
*[https://svgmap.org/movie/address/ ハイパーレイヤリングアーキテクチャについて]&lt;br /&gt;
*[https://svgmap.org/movie/address/LaWA.html Layers as Web Apps (LaWA)について]&lt;br /&gt;
&lt;br /&gt;
==Slides==&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/crs-and-svg SVGにおける、(地理)空間参照系(CRS(Coordinate Reference System))]&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/tiling-51301496 SVGMapのタイリングアーキテクチャ]&lt;br /&gt;
*[https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-for-web-mapping-in-japanese タイリングアーキテクチャ詳細解説]&lt;br /&gt;
*SVGMapのLevel of Detail(縮尺に応じたコンテンツ制御)アーキテクチャ&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-ofdetail Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-of-detail-2 Part2]&lt;br /&gt;
*SVGMap全体のプレゼン資料&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20110311-takagi Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20120525-takagi Part2]&lt;br /&gt;
**[https://github.com/satakagi/TPAC2019-docs/blob/master/MAP.md W3C TPAC2019 MapCG slide]&lt;br /&gt;
* [https://satakagi.github.io/mapsForWebWS2020-docs/imgs/W3C%20TPAC2022%20Maps4HTMLtalk%20Satakagi.html W3C TPAC2022 Maps4HTML meeting talk - slide]&lt;br /&gt;
** [https://svgmap.org/slides/W3C%20TPAC2022%20Maps4HTMLtalk(JP).pdf 日本語版・増補版]&lt;br /&gt;
&lt;br /&gt;
==goSVG技術解説書(SVGMapの旧称)==&lt;br /&gt;
* gコンテンツ流通推進協議会(オリジナル:ドメイン廃止：リンク切れ) &amp;lt;!-- https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf --&amp;gt;&lt;br /&gt;
* [https://web.archive.org/web/20071012194715/https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf Internet Archive ミラー]&lt;br /&gt;
&lt;br /&gt;
==JIS規格 (X 7197：2012)==&lt;br /&gt;
*[http://kikakurui.com/x7/X7197-2012-01.html SVGMapのJIS規格書のhtml版(kikakurui.com)] &lt;br /&gt;
*[https://webdesk.jsa.or.jp/books/W11M0090/index/?bunsyo_id=JIS+X+7197%3A2012 同日本規格協会の規格書プレビュー＆購入ページ]&lt;br /&gt;
*SVGにおける地図の表現及びサービスJIS原案の概要（gコンテンツ流通推進協議会:ドメイン廃止:リンク切れ) &amp;lt;!-- https://www.g-contents.jp/filedown.php?item1=4&amp;amp;item2=11&amp;amp;page=370&amp;amp;type=1&amp;amp;mode=disp&amp;amp;admin=1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==論文==&lt;br /&gt;
*[https://satakagi.github.io/mapsForWebWS2020-docs/ mapsForWebWS2020-docs]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/position.html position statement]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html Decentralized Web Mapping]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html Quad Tree Composite Tiling and the standardization of tiling]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/update202110.html Update on SVGMap from Fall 2020 to October 2021]&lt;br /&gt;
&lt;br /&gt;
==W3C Activities==&lt;br /&gt;
*[https://www.w3.org/submissions/2011/04/ Tiling and Layering Module for SVG Member Submission]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/HyperLayeringArchitectureCommunityReport.html Hyper-Layering CG Report on Maps for HTML CG]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/minimalMapModel.html Minimal Map Model CG Report on Maps for HTML CG]&lt;br /&gt;
==[https://discourse.wicg.io/c/web-mapping/22 discourse.wicg.io]==&lt;br /&gt;
*[https://discourse.wicg.io/t/vector-tiling-on-svgmap/3135/6 Vector Tiling on SVGMap]&lt;br /&gt;
&lt;br /&gt;
==[http://svg2.mbsrv.net/devinfo/index.html このサイトの SVGMap関係リソースのインデックス]==&lt;br /&gt;
===[[OpenStreetMapデータからレイヤーを作成する]]===&lt;br /&gt;
===[[クロスオリジンアクセス]]===&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2378</id>
		<title>リンク集</title>
		<link rel="alternate" type="text/html" href="https://www.svgmap.org/wiki/index.php?title=%E3%83%AA%E3%83%B3%E3%82%AF%E9%9B%86&amp;diff=2378"/>
		<updated>2026-01-07T23:52:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==メディア掲載記事==&lt;br /&gt;
*[https://news.mynavi.jp/article/20240621-2970589/ 「SVGMap」とは？ ハイパーレイヤリングを使った災害情報表示システム] : 基本設計理念の解説記事 (2024年6月)&lt;br /&gt;
&lt;br /&gt;
==スライド動画==&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/index_HLA_breakout.html W3C TPAC2025 ハイパーレイヤリングアーキテクチャ　ブレークアウトセッション]&lt;br /&gt;
*[https://svgmap.org/movie/AC2024/ W3C AC2024 防災×WWW / SVGMap セッション]&lt;br /&gt;
&lt;br /&gt;
==解説音声==&lt;br /&gt;
*[https://svgmap.org/movie/address/ ハイパーレイヤリングアーキテクチャについて]&lt;br /&gt;
*[https://svgmap.org/movie/address/LaWA.html Layers as Web Apps (LaWA)について]&lt;br /&gt;
&lt;br /&gt;
==Slides==&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/crs-and-svg SVGにおける、(地理)空間参照系(CRS(Coordinate Reference System))]&lt;br /&gt;
*[http://www.slideshare.net/totipalmate/tiling-51301496 SVGMapのタイリングアーキテクチャ]&lt;br /&gt;
*[https://www.slideshare.net/totipalmate/quad-tree-composite-tiling-for-web-mapping-in-japanese タイリングアーキテクチャ詳細解説]&lt;br /&gt;
*SVGMapのLevel of Detail(縮尺に応じたコンテンツ制御)アーキテクチャ&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-ofdetail Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/level-of-detail-2 Part2]&lt;br /&gt;
*SVGMap全体のプレゼン資料&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20110311-takagi Part1]&lt;br /&gt;
**[http://www.slideshare.net/totipalmate/webgis-20120525-takagi Part2]&lt;br /&gt;
**[https://github.com/satakagi/TPAC2019-docs/blob/master/MAP.md W3C TPAC2019 MapCG slide]&lt;br /&gt;
* [https://satakagi.github.io/mapsForWebWS2020-docs/imgs/W3C%20TPAC2022%20Maps4HTMLtalk%20Satakagi.html W3C TPAC2022 Maps4HTML meeting talk - slide]&lt;br /&gt;
** [https://svgmap.org/slides/W3C%20TPAC2022%20Maps4HTMLtalk(JP).pdf 日本語版・増補版]&lt;br /&gt;
&lt;br /&gt;
==goSVG技術解説書(SVGMapの旧称)==&lt;br /&gt;
* gコンテンツ流通推進協議会(オリジナル:ドメイン廃止：リンク切れ) &amp;lt;!-- https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf --&amp;gt;&lt;br /&gt;
* [https://web.archive.org/web/20071012194715/https://www.g-contents.jp/files/goSVGTechnicalInstruction.pdf Internet Archive ミラー]&lt;br /&gt;
&lt;br /&gt;
==JIS規格 (X 7197：2012)==&lt;br /&gt;
*[http://kikakurui.com/x7/X7197-2012-01.html SVGMapのJIS規格書のhtml版(kikakurui.com)] &lt;br /&gt;
*[https://webdesk.jsa.or.jp/books/W11M0090/index/?bunsyo_id=JIS+X+7197%3A2012 同日本規格協会の規格書プレビュー＆購入ページ]&lt;br /&gt;
*SVGにおける地図の表現及びサービスJIS原案の概要（gコンテンツ流通推進協議会:ドメイン廃止:リンク切れ) &amp;lt;!-- https://www.g-contents.jp/filedown.php?item1=4&amp;amp;item2=11&amp;amp;page=370&amp;amp;type=1&amp;amp;mode=disp&amp;amp;admin=1 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==論文==&lt;br /&gt;
*[https://satakagi.github.io/mapsForWebWS2020-docs/ mapsForWebWS2020-docs]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/position.html position statement]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/De-centralizedWebMapping.html Decentralized Web Mapping]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/QuadTreeCompositeTilingAndVectorTileStandard.html Quad Tree Composite Tiling and the standardization of tiling]&lt;br /&gt;
**[https://satakagi.github.io/mapsForWebWS2020-docs/update202110.html Update on SVGMap from Fall 2020 to October 2021]&lt;br /&gt;
&lt;br /&gt;
==W3C Activities==&lt;br /&gt;
*[https://www.w3.org/submissions/2011/04/ Tiling and Layering Module for SVG Member Submission]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/HyperLayeringArchitectureCommunityReport.html Hyper-Layering CG Report on Maps for HTML CG]&lt;br /&gt;
*[https://svgmap.org/movie/TPAC2025/minimalMapModel.html Minimal Map Model CG Report on Maps for HTML CG]&lt;br /&gt;
==[https://discourse.wicg.io/c/web-mapping/22 discourse.wicg.io]==&lt;br /&gt;
*[https://discourse.wicg.io/t/vector-tiling-on-svgmap/3135/6 Vector Tiling on SVGMap]&lt;br /&gt;
&lt;br /&gt;
==[http://svg2.mbsrv.net/devinfo/index.html このサイトの SVGMap関係リソースのインデックス]==&lt;br /&gt;
===[[OpenStreetMapデータからレイヤーを作成する]]===&lt;br /&gt;
===[[クロスオリジンアクセス]]===&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
</feed>