2

我有点坚持让保存的折线再次可编辑。目前,我已将点存储在 mysql 数据库中,并且可以使用自定义标记再次显示路线/折线。

现在我喜欢折线再次可编辑,为此我正在研究: http: //www.birdtheme.org/useful/v3tool.html

我遇到的问题:

  1. 我无法让已经保存的点/标记像刚刚放置在地图上一样。例如,这些点不能拖放。可以拾取标记,但我无法再次将其放在地图上(我已经尝试过事件 dragend)。
  2. 我不想要中间标记,只想要移动标记、添加和删除标记的能力

目前我的启动功能如下所示:

function startEditing(){

                if(editing === true){
                        stopediting();
                }else{
                routeCoords = theRoute.getPath();    
                //remove custom icons
                //setAllMap(null);
                if(routeCoords.length > 0){
                           for(var i = 0; i < routeCoords.length; i++) {
                                var marker = setmarkers(routeCoords.getAt(i));
                               //alert("marker: "+marker);
                               markers.push(marker);
                               /*if(i > 0) {
                                   var midmarker = setmidmarkers(routeCoords.getAt(i));
                                   midmarkers.push(midmarker);
                               }*/
                           }
                           editing = true;
                           jQuery('#btnEditing').removeClass('green');
                           jQuery('#btnEditing').val('Stop Editing').addClass('red');
                       }

                }
        }

和功能 setmarkers 看起来像

function setmarkers(point){
             var marker = new google.maps.Marker({
                position: point,
                map: map,
                icon: imageNormal,
                raiseOnDrag: false,
                draggable: true
            });
            google.maps.event.addListener(marker, "mouseover", function() {
                marker.setIcon(imageHover);
            });
            google.maps.event.addListener(marker, "mouseout", function() {
                marker.setIcon(imageNormal);
            });
            google.maps.event.addListener(marker, "drag", function() {

                for (var i = 0; i < markers.length; i++) {
                    if (markers[i] === marker) {
                        theRoute.getPath().setAt(i, marker.getPosition());
                        movemidmarker(i);
                        //movemarker(i);
                        break;
                    }
                }
                routeCoords = theRoute.getPath();
                var stringtobesaved = marker.getPosition().lat().toFixed(6) + ',' + marker.getPosition().lng().toFixed(6);
                pointsArray.splice(i,1,stringtobesaved);
            });

           ////#end markers van DB

            google.maps.event.addListener(marker, "click", function() {

                for (var i = 0; i < markers.length; i++) {
                    if (markers[i] === marker && markers.length !== 1) {
                        marker.setMap(null);
                        markers.splice(i, 1);
                        theRoute.getPath().removeAt(i);
                        removemidmarker(i);
                        break;
                    }
                }
                routeCoords = theRoute.getPath();
                if(markers.length > 0) {
                    pointsArray.splice(i,1);

                }
            });


            return marker;

        }

有什么建议么?

4

1 回答 1

1

使几何图形可编辑的最简单方法是设置属性editable: true。当您希望您的形状可编辑时,您可以快速迭代矢量图层中的每个几何图形(点、多边形等)并设置 editable = true。看看这里的例子https://developers.google.com/maps/documentation/javascript/examples/user-editable-shapes

这里的另一个例子

这将为您提供那些框/锚,稍后您可以简单地将每个几何图形上的可编辑设置为 false。

对于拖动标记,看这里片段

// Update current position info.
  updateMarkerPosition(latLng);
  geocodePosition(latLng);

  // Add dragging event listeners.
  google.maps.event.addListener(marker, 'dragstart', function() {
    updateMarkerAddress('Dragging...');
  });

  google.maps.event.addListener(marker, 'drag', function() {
    updateMarkerStatus('Dragging...');
    updateMarkerPosition(marker.getPosition());
  });

  google.maps.event.addListener(marker, 'dragend', function() {
    updateMarkerStatus('Drag ended');
    geocodePosition(marker.getPosition());
  });
于 2013-06-04T09:30:35.457 回答