0

我在地图上有多个圆圈标记。

我想找出有多少多段线穿过该标记并想要删除该多段线如果多段线不存在,那么我想添加多段线。

我正在使用传单。

          <script type="text/javascript">

      function init(){
    var map = L.map('map').setView([51.49521, -0.10062], 13);
    L.tileLayer('http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png', {
        maxZoom: 18,
        attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>'
    }).addTo(map);

    // get all 6 points
    var points = [
        [51.49346, -0.11518],
        [51.49827, -0.06763],
        [51.48331, -0.08154],
        [51.52284, -0.09974],
        [51.51932, -0.06695],
        [51.50949, -0.1363]
    ];

    // polyline
    var selection = [];
    var polyline = new L.Polyline([], {
        color: 'blue',
        weight: 5,
        smoothFactor: 1
    }).addTo(map);

    var changeMarkerState = function (marker, select) {
        if (marker instanceof L.CircleMarker) {
            if (select) {
                marker.setRadius(25);
            } else {
                marker.setRadius(10);
            }
        }
        if (marker instanceof L.Marker) {
            if (select) {
                marker.options.title = 'selected';
            } else {
                marker.options.title = 'unselected';
            }
            marker.setIcon(new L.Icon.Default());
        }
    };

    var onClick = function () {
        var index = selection.indexOf(this);
        if (index !== -1) {
            changeMarkerState(this, false);
            selection.splice(index, 1);
            polyline.spliceLatLngs(index, 1);
        } else {
            changeMarkerState(this, true);
            selection.push(this);
            polyline.addLatLng(this.getLatLng())
        }
    };

    // centerpoint
    var centerPoint = new L.LatLng(51.49521, -0.10062);
    var marker1 = L.marker([51.49521, -0.10062],
            {title: 'unselected'}).on('click', onClick).addTo(map);


    // adding allo points to map
    for (var i = 0, l = points.length; i < l; i++)
    {
        // here I can use marker also(if solution is possible with markers)
        L.circleMarker(points[i]).on('click', onClick).addTo(map);
        var myPoint = new L.LatLng(points[i][0],points[i][1]);
        var myPointList = [myPoint, centerPoint];

    var firstpolyline = new L.Polyline(myPointList, {
    color: 'red',
    weight: 5,
    smoothFactor: 1

    }).addTo(map);
    }

    }
      </script>

在上面的代码中,我正在做的是从不同的圆圈标记到一个中心点绘制多条红色折线。

在选择两个圆形标记时,我在它们之间绘制蓝色折线。

同时我想删除圆圈标记和中心点之间的红色折线。

此外,如果未选择圆形标记,则应添加该圆形标记和中心点之间的红色折线。

4

1 回答 1

0

要比较两个 latlng,请使用L.LatLng.equalshttps ://github.com/Leaflet/Leaflet/blob/master/src/geo/LatLng.js#L24 。

要从折线中获取纬度,请使用L.Polyline.getLatLngshttps ://github.com/Leaflet/Leaflet/blob/master/src/layer/vector/Polyline.js#L34 。

现在您可以在折线中找到您的观点并使用以下方法将其删除:https://github.com/Leaflet/Leaflet/blob/master/src/layer/vector/Polyline.js#L48 或添加使用:https : L.Polyline.spliceLatLngs// github。 com/Leaflet/Leaflet/blob/master/src/layer/vector/Polyline.js#L43或使用设置:https ://github.com/Leaflet/Leaflet/blob/master/src/layer/vector/Polyline.js #L38L.Polyline.addLatLngL.Polyline.setLatLngs

于 2013-03-07T08:34:55.317 回答