В угловых и открытых слоях установите имя точек карты, чтобы быть динамическими - PullRequest
0 голосов
/ 08 сентября 2018

Я использую 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 

Но это не обновляет имя на карте, так как происходит редактирование текстового поля.

Как я могу это исправить?

Спасибо

...