angular6 と openlayers5 を使用しています。
シナリオは、ユーザーが検索を行い、一部のフィーチャがデータベースから取得され、OL ベクター レイヤーにレンダリングされるというものです。この時点で、地物にはデータベース (postgresql) に由来する名前が既に付けられているため、地図上にレンダリングされたときの名前になります。
その後、ユーザーはそれらのいずれかをクリックして編集できます。機能の名前を含むテキストフィールドがありますが、編集できます。
テキストフィールドの名前が編集されている間に、マップ上のフィーチャの名前を編集したいと思います。現在、テキスト フィールドで名前を編集していますが、マップ上の名前は変更されず、ユーザーを混乱させることは間違いありません。
私が今持っているもの。検索のたびに GeoJSON を取得し、レイヤーに配置します。
const results = (new GeoJSON()).readFeatures(data.data);
this.myvectorsource.addFeatures(results);
機能をクリックすると、その名前が取得され、オブジェクトに配置されます。
this.currentPoint.name = this.selectClick.getFeatures().item(0).values_.name;
次に、データベースからその機能のすべての追加の詳細を取得し、値でリセットすることにより、それらを角度のあるリアクティブ形式にする関数があります
nameField:[data.name]
最後に、これはマップ上のフィーチャのテキストを処理するフィーチャ スタイリング関数です (元の OL の例に触発されています)。
const getText = (feature,resolution) => {
let text="";
if(feature.values_.name){
text = feature.values_.name;
}
else{
text = this.currentPoint.name;
}
return text;
};
私は何かをやってみました
text = this.editingForm.get('editingFormNameGroup').get('nameField').value
ただし、テキストフィールドの編集が行われているため、マップ上の名前は更新されません。
どうすればこれを修正できますか?
ありがとう