2017-09-13 17 views
2

我想制作一组同时拖动的对象,以便只能将它们拖到一起。这意味着:如果我移动一个对象,图层中的其他对象将被移动到。 特别是我有一个geojson文件,其中包含几个对象组成的featureCollection,我希望它们是可拖动的,但在地图上表现为单个标记。是否可以在小册子中制作一个由多个可拖动对象组成的图层?

到目前为止,我有:

var mymap = L.map('mapid').setView... 
... 

var drag = L.geoJson(null,{ 
    draggable: true, 
}); 

omnivore.geojson('data.geojson', null, drag).addTo(mymap) 

我已经包含 Leaflet.Path.Drag使GeoJSON的对象拖动。

在结果中geojson要素集合中的每个要素都可以独立拖动。我怎么能把他们联系起来?

+0

试着在这看,它可能有你正在寻找的解决方案。 https://www.phpclasses.org/leafletmapportal – mega6382

回答

2

我终于通过让d3处理拖动部分来解决它。在添加到地图之后选择组元素,并通过d3.drag()对其进行翻译。

var d = [{ x: 0, y: 0 }]; 
d3.select('svg').select('g').data(d) 
    .attr("transform", function (d) { 
     return "translate(" + d.x + "," + d.y + ")"; }) 
    .call(onDragDrop(dragmove, dropHandler)); 

function onDragDrop(dragHandler, dropHandler) { 
    var drag = d3.drag(); 

    drag.on("drag", dragHandler) 
     .on("end", dropHandler); 
    return drag; 
} 

function dropHandler(d) { 
    alert('dropped'); 
} 

function dragmove(d) { 
     d.x += d3.event.dx; 
     d.y += d3.event.dy; 
     d3.select(this) 
      .attr("transform", "translate(" + d.x + "," + d.y + ")"); 
} 
相关问题