GISを使って作業すると、時にはかなり高度なワークフローやモデルなどが生まれます。次のステップは、これらのツールを他の関係者や人々と共有して一緒に使うにはどうすればよいか、ということかもしれません。これを実現する方法はいくつかあります:<\/P>
このブログ記事では最後のアプローチについて説明し、Web AppBuilder用のカスタマイズ可能なウィジェットを作成したいと思います。<\/P>
WABは
一度解凍してArcGISアカウントで設定(Portal for ArcGISに接続し、Portal上でアプリを作成し、そのアプリをPortalに登録)すれば準備完了です:<\/P>
<\/P>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/><SPAN class="token tag">div</SPAN></SPAN></SPAN>><\/><BR> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/><SPAN class="token tag">div</SPAN></SPAN></SPAN> class="title">Zoom Level Info</div><BR> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/><SPAN class="token tag">div</SPAN></SPAN></SPAN> class="row"><BR> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/><SPAN class="token tag">input</SPAN></SPAN></SPAN> type="checkbox" id="ZoomSetCheckbox"></input><BR> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/><SPAN class="token tag">p</SPAN></SPAN></SPAN> style="display:inline">Show Zoom Info</p><BR> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/><SPAN class="token tag">/div</SPAN></SPAN></span>><BR> <span class='token tag'><span class='token tag'><div class="row"></span></span> <span class='token tag'><span class='token tag'><input type="checkbox" id="ScaleSetCheckbox"></input></span></span> <span class='token tag'><span class='token tag'><p style="display:inline"></span></span>Show Approx. Scale<span class='token tag'><span class='token tag'></p></span></span> <span class='token tag'><span class='token tag'></div></span></span> <span class='token tag'><span class='token tag'></div></span></span> <span class='line-numbers-rows'><span><<EMOJI_2>><\/><BR><span><<EMOJI_3>><\/><BR><span><<EMOJI_4>><\/><BR><span><<EMOJI_5>><\/><BR><span><<EMOJI_6>><\/><BR><span><<EMOJI_7>><\/><BR><span><<EMOJI_8>><\/><BR><span><<EMOJI_9>><\/><BR><span><<EMOJI_10>><\/><BR><span><<EMOJI_11>><\/><BR><span><<EMOJI_12>></span></span></PRE><P>しかしこれはウィジェットなので、デフォルト設定は <EM>config.json<\/> に保存したいため、setting.html を設定ファイルと連携させる必要があります。 <EM>settings.js <\/EM>ファイル。<\/P><P>したがって、ボタンのidだけでなく(各ウィジェットは同一のidを持つアイテムを含む可能性があります...)、data connectorsも使用します:<\/P><PRE class="lia-code-sample line-numbers language-none"><CODE><SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>div<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>div<\/SPAN> <SPAN class="attr-name token">class<\/SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=<\/SPAN><SPAN class="punctuation token">"<\/SPAN>title<SPAN class="punctuation token">"<\/SPAN><\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>ズームレベル情報<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/span>div<\/span><span class="punctuation token">><\/span><\/span> <span class="token tag"><span class="token tag"><span class="punctuation token"><<\/span>div<\/span> <span class="attr-name token">class<\/span><span class="attr-value token"><span class="punctuation token">=<\/span><span class="punctuation token">"<\/span>row<span class="punctuation token">"<\/span><\/span><span class="punctuation token">><\/span><\/span> <span class="token tag"><span class="token tag"><span class="punctuation token"><<\/span>input<\/span> <span class="attr-name token">type<\/span><span class="attr-value token"><span class="punctuation token">=<\/span><span class="punctuation token">"<\/span>checkbox<span class="punctuation token">"<\/span><\/span> <span class="attr-name token">id<\/span><span class="attr-value token"><span class="punctuation token">=<\/span><span class="punctuation token">"<\/span>ZoomSetCheckbox<sp anclass=\"punctuationtoken\">"<\ / span >< / span > < spanclass=\"attr-name token\" > data-dojo-attach-point < / span >< spanclass=\"attr-value token\" > < spanclass=\"punctuationtoken\" > = < / span > < spanclass=\"punctuationtoken\" > " < / span > ZoomSetCheckbox < spanclass=\"punctuationtoken\" > " < / span >< / span >< spanclass=\"punctuationtoken\" > > < / span >< / span >< spanclass=\"token tag\" >< spanclass=\"token tag\" >< spanclass=\"punctuationtoken\" > < \/ < / span > input < / span >< spanclass=\"punctuationtoken\" > > < / span >< / span > < spanclass=\"token tag\" >< spanclass=\"token tag\" >< spanclass=\"punctuationtoken\" > < p < / span > < spanclass=\"style-attr language-css token\" >< spanclass=\"attr-name token\" > style < / span > = " display : inline " > Show Zoom Info < / p > < / div > < divclass= " row " > < inputtype = " checkbox " id = " ScaleSetCheckbox " data-dojo-attach-point = " ScaleSetCheckbox " ></ input > < p style = " display : inline " > Show Approx. Scale < / p > </ div > </ div ><SP ANCLASS= " line-numbers-rows " >< SP AN >< EMOJI_1 >< \/ SP AN >< SP AN >< EMOJI_2 >< \/ SP AN >< SP AN >< EMOJI_3 >< \/ SP AN >< SP AN >< EMOJI_4 >< \/ SP AN >< SP AN >< EMOJI_5 >< \/ SP AN >< SP AN >< EMOJI_6 >< \/ SP AN >< SP AN >< EMOJI_7 >< \/ SP AN >< SP AN >< EMOJI_8 >< \/ SP AN >< SP AN >< EMOJI_9 >< \/ SP AN >< SP AN >< EMOJI_10 >< \/ SP AN >< SP AN >< EMOJI_11 >< \/ SP AN ></ SP AN ></ CODE ></ PRE ></ P > 今、ボタンの状態と通信できます。<\/P><P>setting.jsファイルには主に2つの機能があります:設定をconfig.jsonファイルに読み書きし、新しいアプリでウィジェットが常に正しい設定を使用するようにすることです。<\/P><P><EM>config.json<\/EM>ファイルの設定は以下のようにします:<\/P><PRE class="lia-code-sample line-numbers language-none"><CODE>{ "settings": { "ZoomSetCheckbox": true, "ScaleSetCheckbox": true } }<EMOJI_12><SP ANCLASS= " line-numbers-rows " > <SP AN><EMOJI_13></SP> <SP AN><EMOJI_14></SP> <SP AN><EMOJI_15></SP> <SP AN><EMOJI_16></SP> <SP AN><EMOJI_17></SP> <SP AN><EMOJI_18></SP>
define([ 'dojo/_base/declare', 'jimu/BaseWidgetSetting' ], function(declare, BaseWidgetSetting) { return declare([BaseWidgetSetting], { startup: function() { this.inherited(arguments); console.log(this.config); this.setConfig(this.config); }, setConfig: function() { class="punctuation token">(<\/SPAN>config<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">{<\/SPAN> <SPAN class="keyword token">this<\/SPAN><SPAN class="punctuation token">.<\/SPAN>config <SPAN class="operator token">=<\/SPAN> config<SPAN class="punctuation token">;<\/SPAN> <SPAN class="keyword token">this<\/SPAN><SPAN class="punctuation token">.<\/SPAN>ZoomSetCheckbox<SPAN class="punctuation token">.<\/SPAN>checked <SPAN class="operator token">=<\/SPAN> config<SPAN class="punctuation token">.<\/SPAN>settings<SPAN class="punctuation token">.<\/SPAN>ZoomSetCheckbox<SPAN class="punctuation token">;<\/SPAN> <SPAN class="keyword token">this<\/SPAN><SPAN class="punctuation token">.<\/SPAN>ScaleSetCheckbox<SPAN class="punctuation token">.<\/SPAN>checked <SPAN class="operator token">=<\/SPAN> config<SPAN class="punctuation token">.<\/SPAN>settings<SPAN class="punctuation token">.<\/SPAN>ScaleSetCheckbox<SPAN class="punctuation token">;<\/SPAN> console<SPAN class="punctuation token">.<\/SPAN><SPAN class="token function">log<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="string token">"ファイルから読み取った設定: "<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN> console<SPAN class="punctuation token">.<\/SPAN><SPAN class="token function">log<\/SPAN><SPAN class="punctuation token">(<\/SPAN>config<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN> <SPAN class="punctuation token">}<\/span><span class="punctuation token">,<\/span> getConfig<span class="punctuation token">:<\/span> <span class="keyword token">function<\/span><span class="punctuation token">(<\/span><span class="punctuation token">)<\/span><span class="punctuation token">{<\/span> settings <span class="operator token">=<\/span> <span class="keyword token">this<\/span><span class="punctuation token">.<\/span>config<span class="punctuation token">.<\/span>settings<span class="punctuation token">;<\/span> if <span class="punctuation token">(<\/span><span class="keyword token">this<\/span><span class="punctuation token">.<\/span>ZoomSetCheckbox<span class="punctuation token">)<\/span> <span class="punctuation token">{<\/span> settings<span class="punctuation token">.<\/span>ZoomSetCheckbox <span class="operator token">=<\/span> <span class="keyword token">this<\/span><span class="punctuation token">.<\/span>ZoomSetCheckbox<span class="punctuation token">.<\/span>checked<span class="punctuation token">;<\/span> } if <span class="punctuation token">(<\/this.ScaleSetCheckbox){ settings<spanclass="operatortoken">=</pan>this.ScaleSetCheckbox.checked;</pan> } this<spanclass="keywordtoken">.config<spanclass="operatortoken">=</pan>settings<spanclass="punctuationtoken">; console.log("設定をファイルに書き込み中: " + settings); console.log(this.config); return this.config; } }, }); このコードはボタンの状態(this.XXXSetCheckbox)を読み取り、それが使用されている各アプリのconfigに書き込み、使用されている設定に従って構成を読み取ります。 <h4 id="toc-hId-1555079577" id="toc-hId-1555079577"> Widget.html / Widget.js </h4> <p> 前述の段落で設定について説明したので、ここでは主にWidget.htmlとWidget.jsのメインコードに集中しましょう。 </p> <p> ウィジェットには2行だけ表示しています:ズームレベル用の1行とスケール用の1行です。したがって、Widget.htmlファイルは非常に短く、2行で構成されています: </p> <div class=\"ZoomLeveLInfo\"> <div data-dojo-attach-point=\"zoomInfoDiv\"> Zoom Level: <p style=\"display: inline;\" data-dojo-attach-point=\"MapZoomInfo\"></p> </div> <div data-dojo-attach-point=\"scaleInfoDiv\"> Approx. Scale: <p style=\"display: inline;\"> token">"<\/SPAN><\/SPAN> <SPAN class="attr-name token">data-dojo-attach-point<\/SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=<\/SPAN><SPAN class="punctuation token">"<\/SPAN>scaleInfo<SPAN class="punctuation token">"<\/SPAN><\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN><SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>p<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN><SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>div<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>div<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN> <SPAN class="line-numbers-rows"><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><\/SPAN><\/CODE><\/PRE><P>同様のアプローチは <EM>Setting.html<\/EM> にも見られます: data-dojo-attach-points を使って div 要素にアクセスし、この div の内容を変更します。インラインで行うこともできますが、構造を維持し、JavaScript 部分は <EM>Widget.js<\/EM> に定義しています。<\/P><PRE class="lia-code-sample line-numbers language-none"><CODE><SPAN class="token function">define<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">[<\/SPAN> <SPAN class="string token">'dojo\/_base\/declare'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">'dojo\/_base\/lang'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">'jimu\/BaseWidget'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">'dojo\/on'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="comment token">// マップがパンされたときに "on.extent-change" で div を変更するため<\/SPAN> <SPAN class="string token">'esri\/map'<\/SPAN> <SPAN class="comment token">// マップとやり取りするため<\/SPAN> <SPAN class="punctuation token">]<\/SPAN><SPAN class="punctuation token">,<\/SPA... class="number token">1000<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="operator token">*<\/SPAN><SPAN class="number token">1000<\/SPAN> <SPAN class="punctuation token">;<\/SPAN> <SPAN class="punctuation token">}<\/SPAN> <SPAN class="keyword token">else<\/SPAN> <SPAN class="punctuation token">{<\/SPAN> dojo<SPAN class="punctuation token">.<\/SPAN><SPAN class="token function">destroy<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="keyword token">this<SPAN class="punctuation token">.<\/SPAN>scaleInfoDiv<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN> <SPAN class="punctuation token">}<\/SPAN> <SPAN class="punctuation token">}<\/SPAN> <SPAN class="punctuation token">}<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN> <SPAN class="punctuation token">}<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN> <SPAN class="line-numbers-rows"><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ><Span ></span > < < < </span></span>
web app new custom app implement manifest.json file create need. manifest.json.</EM>file name main settings basic information hold:</P>{ "name": "ZoomLevelInfo", "platform": "HTML", "version": "2.8", "wabVersion": "2.8", "author": "Esri Deutschland GmbH // Riccardo Klinger", "description": "This is a widget to show scale and zoom level of the underlying map.", "copyright": "", "license": "http://www.apache.org/licenses/LICENSE-2.0", "properties": { "inPanel": false, //as it is off-panel "hasUIFile": true, // we do have a settings ui file "supportMultiInstance": false´// we just allow one instance of the widget. } }<SPAn class="line-numbers-rows"><SPAn ><<EmoJi_34>> </SPAn ><<EmoJi_35>> <<EmoJi_36>> <<EmoJi_37>> <<EmoJi_38>> <<EmoJi_39>> <<EmoJi_40>> <<EmoJi_41>> <<EmoJi_42>> <<EmoJi_43>> <<EmoJi_44>> <<EmoJi_45>> <<EmoJi_46>> <<EmoJi_47>> <<EmoJi_48>> </SPAn >widget test now can.</P>testing the Widgetmain widget create as, WAB Developer installation test should now. Therefore whole folder (our case ZoomLevelInfo) WAB client widget folder (my case "C:\WebAppBuilderForArcGIS\client\stemapp\widgets") place.</P>test for, Web AppBuilder restart and new application create:</P>
{ "name": "ZoomLevelInfo", "platform": "HTML", "version": "2.8", "wabVersion": "2.8", "author": "Esri Deutschland GmbH // Riccardo Klinger", "description": "This is a widget to show scale and zoom level of the underlying map.", "copyright": "", "license": "http://www.apache.org/licenses/LICENSE-2.0", "properties": { "inPanel": false, //as it is off-panel "hasUIFile": true, // we do have a settings ui file "supportMultiInstance": false´// we just allow one instance of the widget. } }<SPAn class="line-numbers-rows"><SPAn ><<EmoJi_34>> </SPAn ><<EmoJi_35>> <<EmoJi_36>> <<EmoJi_37>> <<EmoJi_38>> <<EmoJi_39>> <<EmoJi_40>> <<EmoJi_41>> <<EmoJi_42>> <<EmoJi_43>> <<EmoJi_44>> <<EmoJi_45>> <<EmoJi_46>> <<EmoJi_47>> <<EmoJi_48>> </SPAn >
widget now Web AppBuilder part and widget as select can:</P>
tests successful if, server on widget host and ArcGIS Online or ArcGIS Enterprise (>10.5) environment as custom widget implement can. Portal own if, portal WAB inside folder add also want might (my case "C:\Program Files\ArcGIS\Portal\apps\webappbuilder\stemapp\widgets").
example use want if, github here. Or directly below download can.</P>
サインインしたメンバーは投稿、更新のフォローなどができます。初めてですか?無料アカウントを登録してください。
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.