How can I drag an icon inside google maps?

后端 未结 2 1309
醉梦人生
醉梦人生 2020-12-11 23:07

I would like to be able to have an icon, placed outside of a google map. Then i would like to have this icon dragged and dropped INTO google maps and use it as a google maps

2条回答
  •  悲哀的现实
    2020-12-11 23:50

    The accepted answer contains some obfuscated code. It took me quite a lot of time to find something a bit more tangible so since this answer comes up first in google search I thought will share something for a good start.

    Note: window.map is where I store reference to my map. Also for cross-browser compatibility I am using jquery-ui draggable (was already included in my project so why not reusing it).

        var pixelToLatlng = function(xcoor, ycoor)
        {
            var ne = window.map.getBounds().getNorthEast();
            var sw = window.map.getBounds().getSouthWest();
            var projection = window.map.getProjection();
            var topRight = projection.fromLatLngToPoint(ne);
            var bottomLeft = projection.fromLatLngToPoint(sw);
            var scale = 1 << window.map.getZoom();
    
            var newLatlng = projection.fromPointToLatLng(new google.maps.Point(xcoor / scale + bottomLeft.x, ycoor / scale + topRight.y));
            return newLatlng;
        };
    
        $(".draggable").draggable(
        {
            helper: "clone",
            appendTo: window.map.getDiv(),
            cursorAt: { left: 5, top: 5 },
            stop: function(event, ui)
            {
                var wrapper = $(window.map.getDiv());
                var map_div_pos = wrapper.offset();
                var map_div_border_left = parseInt(wrapper.css("border-left-width"),10);
                var map_div_border_top = parseInt(wrapper.css("border-top-width"),10);
    
                var mouse_pos = ui.helper.offset();
                lat_lng = pixelToLatlng(mouse_pos.left - map_div_border_left - map_div_pos.left, mouse_pos.top - map_div_border_top - map_div_pos.top);
    
                window.add_group_marker = new google.maps.Marker(
                {
                    position: lat_lng,
                    map: window.map,
                    zIndex: Math.round(lat_lng.lat()*-100000)<<5
                });
            }
        });
    

    Credits:

    • pixelToLatlng was found here: http://www.magicalrosebud.com/how-to-use-googlemaps-api-frompointtolatlng/

    • Hints on calculating x/y when using jquery-ui draggable: How do I get position x and y from jQuery ui draggable?

提交回复
热议问题