Arrastando marcadores com Ordnance Survey / api OpenLayers

votos
2

Criei um site link texto usando a API produzido pelo Ordnance Survey (acho que isso é chamado OpenSpace) que se baseia em OpenLayers. Eu tenho isso para que você pode clicar no mapa para adicionar um marcador e quero, em seguida, ser capaz de clicar nos marcadores e arrastá-lo ao redor do mapa. Existe uma maneira simples de fazer isso usando o OpenSpace ou OpenLayers apis.

Publicado 19/05/2009 em 20:49
fonte usuário
Em outras línguas...                            


2 respostas

votos
6

A api OpenLayers permite adicionar marcadores e recursos para o mapa. Se você adicionar recursos ao invés de marcadores que você pode torná-los draggable adicionando o seguinte código.

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();

Isso permitirá que você arraste recursos em torno de um mapa. Se você deseja adicionar o comportamento personalizado quando o recurso de são arrastados você pode registrar ouvintes no vectorLayer. Por exemplo, para registrar um ouvinte quando recursos são modifed (ou seja arrastado e lançado) você precisa usar o código a seguir.

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

Para uma lista completa dos eventos que podem ser ouvidos para ver o OpenLayers api doc OpenLayers api doc

Respondeu 23/07/2009 em 16:49
fonte usuário

votos
1

Como forma mais fácil de fazer isto é, utilizando o controlo de arrasto openlayer, que leva uma camada de vector como um alvo.

Assumindo uma camada de vetor que contém ícones (esse é o preferido para marcadores, que os desenvolvedores do OL desencorajar usando), chamados de vetores, você pode simplesmente fazer:

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

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

A outra vantagem de usar o controle de arrasto é que você pode ligar para vários retornos de chamada, que retornam a posição recurso e de pixel, como onStart e ondrag. por exemplo,

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
     }
});

veja http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Control/DragFeature.js para mais detalhes.

Respondeu 26/08/2011 em 18:35
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more