[解決済み] 定義への更新/追加Expression
2022-02-08 11:45:57
質問
すでに宣言されている定義式を更新したり、追加したりすることは可能ですか?例えば、このような形式です。
"id IN ('us70008jr5','cgi988jr52')"
最初のdefinationExpressionでidで複数宣言できるのですが、後で更新したり、追加しようとすると、すぐに読み込まれなくなり、実行されません。
フロントエンドからのユーザーの選択に基づいて、定義式を簡単に更新または追加しようとしているのですが、これを更新することができないようです。
let selectedID;
let datA;
layer.definitionExpression = "id IN ('')";
function filterByID(event) {
console.log('filter hit');
selectedID = event.target.getAttribute("data-id");
console.log(selectedID);
layer.refresh();
layer.definitionExpression = "id IN ('"+ selectedID +"')";
}
arcgis-js api 4.xx
解決方法は?
の変更を検出すると自動的に行われるため、レイヤーを更新する必要はありません。
definitionExpression
プロパティを使用します。
リクエストの時間に問題があるのではないかと推測しています。あなたの場合、そしてあなたの その他の質問 (私はあなたに答えを与えることbtw)、これはユーザーが遅延応答を経験するかもしれないので、良い解決策ではありません。ただ、確認し、時間をかければ、単独で更新されることがわかります。
<ブロッククオートレイヤーをマップに追加した後に定義式を設定した場合、ビューは自動的に更新され、新しい定義式を満たすフィーチャーが表示されます。 ArcGIS API - FeatureLayer definitionExpression(フィーチャーレイヤー定義式
念のため、他の回答で作った例を確認したいのですが、更新の際に
definitionExpression
. 基本的なクエリから始まり、ユーザーイベントの入力でチェックされたIDを追加していきます。
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<title>Filter features by attribute - 4.15</title>
<link rel='stylesheet' href='https://js.arcgis.com/4.15/esri/themes/light/main.css' />
<script src='https://js.arcgis.com/4.15/'></script>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 500px;
width: 100%;
}
</style>
<script>
require([
'esri/views/MapView',
'esri/Map',
'esri/layers/FeatureLayer',
'esri/widgets/Expand'
], function (MapView, Map, FeatureLayer, Expand) {
const baseDefinitionExpression = 'eventTime >= CURRENT_TIMESTAMP - 30 AND grid_value > 2';
const layer = new FeatureLayer({
url: 'https://services9.arcgis.com/RHVPKKiFTONKtxq3/arcgis/rest/services/USGS_Seismic_Data_v1/FeatureServer/1/',
outFields: ['*']
, definitionExpression: baseDefinitionExpression
});
const map = new Map({
basemap: 'gray-vector'
, layers: [layer]
});
const view = new MapView({
map: map,
container: 'viewDiv',
center: [-98, 40],
zoom: 4
});
let selectedIDs = {};
function updatedFilter() {
const ids = [];
for(const [key, value] of Object.entries(selectedIDs)) {
if (value) {
ids.push(`'${key}'`);
}
}
layer.definitionExpression =
`${baseDefinitionExpression} AND id IN (${ids.join(',')})`;
console.log(`[updateFilter] ${layer.definitionExpression}`);
}
const idElement = document.getElementById('id-filter');
idElement.addEventListener('click', filterByID);
function filterByID(event) {
const chk = event.target;
console.log(`[filterByID] ${chk.getAttribute('data-id')} ${chk.checked}`);
selectedIDs[chk.getAttribute('data-id')] = chk.checked;
updatedFilter();
}
view.whenLayerView(layer).then(function (layerView) {
const query = layer.createQuery();
query.outFields = ['id'];
query.returnDistinctValues = true;
query.returnGeometry = false;
layer.queryFeatures(query).then(function (results) {
results.features.map(function (feat) {
let id = feat.attributes['id'];
let opt = document.createElement('input');
opt.type = 'checkbox';
let label = document.createElement('label')
label.innerHTML = id;
opt.className = 'id-item visible-id';
opt.setAttribute('data-id', id);
idElement.appendChild(opt);
idElement.appendChild(label);
selectedIDs[id] = false;
});
});
console.log('[whenLayerView]');
});
});
</script>
</head>
<body>
<div id='id-filter' class='esri-widget'>
</div>
<div id='viewDiv'></div>
</body>
</html>
関連
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み] jQueryでテーブルの行を追加する
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーと値のペアを追加するにはどうすればよいですか?
-
[解決済み] 指定された要素にクラスを追加するには?
-
[解決済み] jQueryでJavaScriptオブジェクトから選択する際に、オプションを追加する最も良い方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトに動的に名前を付けたプロパティを追加することは可能ですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】別のjsファイル内でJavaScriptの関数を呼び出す
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?
-
[解決済み] [Solved] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングする
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]