徒手绘制Google Map Drawing [英] Google Map Drawing freehand

查看:81
本文介绍了徒手绘制Google Map Drawing的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最新代码- http://jsfiddle.net/YsQdh/88/-

此版本使用gDouglasPeuker从绘制的版本创建基本的多边形- http://jsfiddle.net/YsQdh/94/

THIS VERSION USES gDouglasPeuker to create a rudamentary polygon shape from the drawn version - http://jsfiddle.net/YsQdh/94/

^这将禁用地图绘制,并在创建形状后再次启用它.

^ this disables the map for drawing, and enables it again after creating the shape.

我正在使用Google Map应用程序.而不是多边形指向并单击运动.我希望能够绘制一个形状-然后将其转换为多边形.

I am working on a google map application. As opposed to a polygon point and click exercise. I want to be able to draw a shape - that is then converted into a polygon.

这是我最新的应用程序- http://jsfiddle.net/Cbk9J/168/

Here is my latest application - http://jsfiddle.net/Cbk9J/168/

我找到了以下代码-但不确定如何将其合并到示例中.我还没有找到可以释放手绘图的文档,并且不确定这些功能是否存在于Google地图绘图管理器中.

I have found the following code - but I am unsure how to incorporate this into the example. I have not found any documentation to free hand drawing and I am unsure if these functions exist in the google maps drawing manager.

    var completeFreehand = function (changed) {
        if (changed) {
            isUserPolygon = true;
            updateLocation();
        }

        unhighlightControls();
        showMessages();
        updateListingResults();
    };

    var completeDelete = function() {
        map.endDeleteSearchArea();
        unhighlightControls();
        showMessages();
    };

    var cancelDelete = function() {
        if (map.isDeletingSearchArea()) {
            completeDelete();
            updateListingResults();
            enableControls();
        }
        return false;
    };

    var cancelFreehand = function () {
        if (map.isDrawingFreehand()) {
            map.cancelFreehand();
            completeFreehand();
            enableControls();
        }
    };

    var clearMap = function (silent) {
        map.clearSearchArea(silent);
        mostRecentPinCount = 0;
        enableControls();
        map.clearMarkers(true);

        return false;
    };

    var drawFreehand = function (element) {

        if (map.isDrawingFreehand()) {

            cancelFreehand();
            return;

        } else if (map.isDeletingSearchArea()) {

            completeDelete();

        }

        disableControls(true);
        highlightControl(element);
        hideMessages();

        if ( $(element).hasClass('js-maps-btn-add') ) {
            $('.js-maps-status-message-draw').removeClass('is-hidden');
        } else {
            $('.js-maps-status-message-new').removeClass('is-hidden');
        }

        map.clearMarkers();
        map.drawFreehand(completeFreehand);
        updateBasePolygon();

        return false;
    };




function updateBasePolygon () {
    if (typeof(basePolygon) == 'undefined') {
        var polys = map.getPolygons();
        if (polys.length) {
            basePolygon = $.map(polys, function (val, i) {
                var a = val.getPath().getArray();
                return [
                    $.map(a, function (val, i) {
                        return [[ val.lat(), val.lng() ]];
                    })
                ];
            });
        }
    }
}

推荐答案

function drawFreeHand()
{

    //the polygon
    poly=new google.maps.Polyline({map:map,clickable:false});
    
    //move-listener
    var move=google.maps.event.addListener(map,'mousemove',function(e){
        poly.getPath().push(e.latLng);
    });
    
    //mouseup-listener
    google.maps.event.addListenerOnce(map,'mouseup',function(e){
        google.maps.event.removeListener(move);
        var path=poly.getPath();
        poly.setMap(null);
        poly=new google.maps.Polygon({map:map,path:path});
        
        
        google.maps.event.clearListeners(map.getDiv(), 'mousedown');
        
        enable()
    });
}

function disable(){
  map.setOptions({
    draggable: false, 
    zoomControl: false, 
    scrollwheel: false, 
    disableDoubleClickZoom: false
  });
}

function enable(){
  map.setOptions({
    draggable: true, 
    zoomControl: true, 
    scrollwheel: true, 
    disableDoubleClickZoom: true
  });
}


function initialize() 
{
  var mapOptions = {
    zoom: 14,
    center: new google.maps.LatLng(52.5498783, 13.425209099999961),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
       
  //draw
  $("#drawpoly a").click(function(e) {
    e.preventDefault();

    disable()

    google.maps.event.addDomListener(map.getDiv(),'mousedown',function(e){
      drawFreeHand()
    });

  });

}

google.maps.event.addDomListener(window, 'load', initialize);

html,body{height:100%;margin:0}
#map_canvas{height:500px; width:100%;}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=geometry,places&ext=.js"></script>

<div id="drawpoly"><a href="#">Click Here To Draw On Map</a></div>

<div id="map_canvas"></div>

这篇关于徒手绘制Google Map Drawing的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆