2016-08-23 2 views
0

У меня есть элемент управления OpenLayers, чтобы нарисовать линию на моей карте. Это прекрасно работает. Теперь я добавил форму, в которой отображаются координаты линии. Пользователь должен иметь возможность редактировать там координаты и при отправке формы, строка должна быть обновлена.OpenLayers DrawFeature генерирует новый слой

Проблема в том, что в итоге я вижу две линии. После некоторой отладки я узнал, что, хотя я указываю DrawFeature, какой слой использовать, обработчик создает новый слой под названием «OpenLayers.Handler.Path». Итак, все, что я рисую с помощью мыши, нарисовано на этом, а строка, созданная путем отправки формы, нарисована на «My Layer».

Я следующий код:

layer = new OpenLayers.Layer.Vector("My Layer"); 
geoExtMap.map.addLayer(layer); 

Control = { 
    line: new OpenLayers.Control.DrawFeature(layer, 
     OpenLayers.Handler.Path, { 
      callbacks: { 
       "point": pointHandler, 
       "done": doneHandler 
      }, 
      handlerOptions: { 
       persist: true, 
       maxVertices: 2, 
       freehand: false, 
       layerOptions: { 
        styleMap: styleMapControls 
       } 
      } 
     }) 
}; 

geoExtMap.map.addControl(Control.line); 


var points = new Array(
    new OpenLayers.Geometry.Point(x1, y1).transform(EPSG, projectData.crs), 
    new OpenLayers.Geometry.Point(x2, y2).transform(EPSG, projectData.crs) 
); 

var line = new OpenLayers.Geometry.LineString(points); 
var lineFeature = new OpenLayers.Feature.Vector(line, null, sketchSymbolizersControls.Line); 

layer.removeAllFeatures(); 
layer.addFeatures([lineFeature]); 

Так почему же обработчик создает новый слой и не использовать указанный один?

ответ

0

Элемент управления DrawFeature использует указанный слой, в то время как OpenLayers.Handler.Path создает новый слой каждый раз, активируется.

Этот новый слой прокомментирован как «Временный слой рисования».

Вы можете попробовать переопределить метод активации и деактивации OpenLayers.Handler.Path, заставив его использовать указанный слой, но может возникнуть какая-то неожиданная проблема. https://github.com/openlayers/ol2/blob/master/lib/OpenLayers/Handler/Point.js#L156 (Handler.Path extends Handler.Point)

Поэтому я попытался бы решить проблему с формой. Вы не публиковали «код формы», поэтому я не могу быть более конкретным, но вы можете попробовать обновить обе функции (на обоих уровнях) или попробовать деактивировать управление рисованием/обработчик во время редактирования формы.

+1

Спасибо за объяснение. Я уже думал, что что-то подобное происходит, но не уверен. Я просто решил свою проблему, дважды нажав кнопку управления, которая удаляет временную линию, но сохраняет управление активным. – Matthieu