Перетаскивание маркеров с помощью Ordnance Survey / Openlayers api - PullRequest
2 голосов
/ 19 мая 2009

Я создал сайт текст ссылки , используя API, созданный Ordnance Survey (я думаю, это называется OpenSpace), который основан на OpenLayers. У меня есть его, так что вы можете нажать на карту, чтобы добавить маркер, и я хочу, чтобы потом можно было кликать на маркеры и перетаскивать их по карте. Есть ли простой способ сделать это, используя OpenSpace или OpenLayers apis.

Ответы [ 2 ]

6 голосов
/ 23 июля 2009

API OpenLayers позволяет добавлять маркеры и функции на карту. Если вы добавляете функции вместо маркеров, вы можете сделать их перетаскиваемыми, добавив следующий код.

var vectorLayer = new OpenLayers.Layer.Vector("Vector Layer");
var osMap = new OpenSpace.Map('map');
osMap.addLayer(vectorLayer);

var modifyFeaturesControl = new OpenLayers.Control.ModifyFeature(vectorLayer);
modifyFeaturesControl.mode = OpenLayers.Control.ModifyFeature.RESHAPE;
osMap.addControl(modifyFeaturesControl);
modifyFeaturesControl.activate();

Это позволит вам перетаскивать объекты по карте. Если вы хотите добавить пользовательское поведение при перетаскивании объектов, вы можете зарегистрировать слушателей на vectorLayer. Например, чтобы зарегистрировать слушателя при изменении функций (т. Е. Перетаскивать и отпускать), вам необходимо использовать следующий код.

vectorLayer.events.register('featuremodified', vectorLayer, function(feature) {
   //custom behavior
});

Полный список событий, которые можно прослушать, можно увидеть в OpenLayers api doc OpenLayers api doc

1 голос
/ 26 августа 2011

Более простой способ сделать это - использовать элемент управления перетаскиванием, который использует векторный слой в качестве цели.

Предполагая векторный слой, содержащий значки (это предпочтительнее маркеров, которые разработчики OL не рекомендуют использовать), называемые векторами, вы можете просто сделать:

var drag=new OpenLayers.Control.DragFeature(vectors);

map.addControl(drag);
drag.activate();

Другое преимущество использования элемента управления перетаскиванием заключается в том, что вы можете подключаться к различным обратным вызовам, которые возвращают объект и положение пикселя, например onStart и onDrag. например,

var drag=new OpenLayers.Control.DragFeature(vectors,{    
     'onDrag':function(feature, pixel){
           console.log(pixel.x);//this can be used to do something else, such as move another feature
     }
});

Подробнее см. http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Control/DragFeature.js.

...