通过更新的lat& lng谷歌地图可拖动标记到另一页

时间:2012-02-23 03:29:33

标签: php javascript html google-maps google-maps-api-3

我有一个谷歌地图,用户可以在地图上点击一个带有信息窗口形式的标记,在那里他们可以编辑数据并将数据保存到数据库中。它类似于:

http://code.google.com/apis/maps/articles/phpsqlinfo_v3.html

但是我已经让我的标记变得可拖动了。如何通过更新的lat& lng到另一个PHP页面来更新数据库?

目前,我正在这样做:

function updateMarkerPosition(latLng) 
{
    document.getElementById('add_lat').value = latLng.lat();
    document.getElementById('add_lng').value = latLng.lng();
}   

function add_editable_mkr()
{
    google.maps.event.addListener(map, 'click', function(event)
    {
        var marker_drag = new google.maps.Marker(
        {
            position: event.latLng,
            draggable:true,
            map: map,
            icon: icon2
        });                     

        // Infowindow form
        var html =  '<div>'+
                    '<form name="add_data" action="phpinsert.php">'+
                            '<input type="text" name="add_lat" value=""/>'+
                            '<input type="text" name="add_lng" value=""/>'+         
                    '</form>'+
                    '</div>';                               

        var popup_form = new google.maps.InfoWindow
        ({      
            maxWidth:800
        });

        google.maps.event.addListener(marker_drag, "click", function() 
        {
            popup_form.setContent(html);                        
            popup_form.open(map, marker_drag);
        }); 

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

    }); 
}

function initialize() 
{
    map = new google.maps.Map(document.getElementById("map"), 
    {
      center: new google.maps.LatLng(1.364236,103.796082),  
        zoom: 4,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        mapTypeControl: true,
        mapTypeControlOptions: 
        {
            style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
        },
        navigationControl: true,
        navigationControlOptions: 
        {
            style: google.maps.NavigationControlStyle.LARGE
        }
    });


    add_editable_mkr(); 
}

但是值会作为空值传递给我的其他页面。还有其他办法吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

在我看来,你的文字输入没有id属性。 因此,您可以为其提供id属性,也可以通过表单

引用它们

在您设置HTML的位置尝试此操作,让我知道它是如何进行的:

var html = '<div>'+
           '<form name="add_data" action="phpinsert.php">'+
                '<input type="text" name="add_lat" id="add_lat" value=""/>'+
                '<input type="text" name="add_lng" id="add_lng" value=""/>'+         
            '</form>'+
            '</div>';

答案 1 :(得分:0)

好的,明白了。 Google地图不只是将HTML放在文档上。我不确定幕后会发生什么,但我认为它会以某种方式克隆内容。似乎有2个输入标签,其id为add_lat。所以,你必须通过它的类名来获取元素并以这种方式更新它。这是文档中的第二个元素。如果使用jQuery,则可以轻松更新页面上任何位置具有特定类名的所有元素。

另外,我发现你编写的代码会发生各种奇怪的事情。因此,我很快将其重写为只有一个标记,并在地图上显示一个infowindow。您可以单击标记以显示当前位置并拖动它以更新位置。

试试这段代码,让我知道你的想法。

function updateMarkerPosition(latLng) 
{
    document.getElementsByClassName('add_lat')[1].value = latLng.lat();
    document.getElementsByClassName('add_lng')[1].value = latLng.lng();
}   

function add_editable_mkr()
{
    var popup_form = new google.maps.InfoWindow({      
        maxWidth:800
    });

    // Infowindow form
    var html =  '<div>'+
                    '<form name="add_data" action="phpinsert.php">'+
                            '<input type="text" class="add_lat" name="add_lat" value=""/>'+
                            '<input type="text" class="add_lng" name="add_lng" value=""/>'+         
                    '</form>'+
                    '</div>'; 

    popup_form.setContent(html);

    var marker_drag = new google.maps.Marker(
    {
        position: map.getCenter(),
        draggable:true,
        map: map,
    });                     

    google.maps.event.addListener(marker_drag, "click", function() 
    {                   
        popup_form.open(map, marker_drag);
        updateMarkerPosition(marker_drag.getPosition());
    }); 

    google.maps.event.addListener(marker_drag, 'dragstart', function()
    {
        popup_form.close();
    });
    google.maps.event.addListener(marker_drag, 'dragend', function() 
    {
        popup_form.open(map, marker_drag);
        updateMarkerPosition(marker_drag.getPosition());
    }); 


    google.maps.event.addListener(map, 'click', function(event)
    {
        marker_drag.setPosition(event.latLng);
    }); 
}

function initialize() 
{
    map = new google.maps.Map(document.getElementById("map"), 
    {
      center: new google.maps.LatLng(1.364236,103.796082),  
        zoom: 4,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        mapTypeControl: true,
        mapTypeControlOptions: 
        {
            style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
        },
        navigationControl: true,
        navigationControlOptions: 
        {
            style: google.maps.NavigationControlStyle.LARGE
        }
    });


    add_editable_mkr(); 
}