doutuan8887 2014-05-01 09:48
浏览 51
已采纳

收集坐标并将其绘制到Google Map


I'm trying to gather several coordinates from a php file and draw them to a google map making several markers. The data are gathered using the .ajax method of the jquery library. Here is my attempt:

allCoordinates.php:

$db_host = "localhost";
$db_user = "root";
$db_password = "root";
$db_database = "googlemapsdemo";

$connection = new mysqli($db_host, $db_user, $db_password, $db_database);

if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$selectvalue = mysqli_real_escape_string($connection, $_GET['svalue']);

mysqli_select_db($connection, $db_database);

$result = mysqli_query($connection, "SELECT latitude, longitude FROM googlemapsdemo.vtiger_geocoding", MYSQLI_USE_RESULT);

$rows = array();

while ($allCoordinates = mysqli_fetch_array($result)){
    $rows[] = array('latitude' => $allCoordinates[0], 'longitude' => $allCoordinates[1]);
}

$json = json_encode($rows);
print $json;



mysqli_free_result($result);
mysqli_close($connection);

?>

index.php:

<html>
<head>
    <title>Google Maps Demo</title>
    <link rel="stylesheet" type="text/css" href="css/style.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"><script type="text/javascript">

    $(document).ready(function(){
        var coordinates, parsedCoordinates;
        var mapCenter = new google.maps.LatLng(51.508742,-0.120850); //Google map Coordinates
        var map;
        map_initialize(); // load map

        function map_initialize(){

            //Google map option
            var googleMapOptions = 
            { 
                center: mapCenter, // map center
                zoom: 17, //zoom level, 0 = earth view to higher value
                panControl: true, //enable pan Control
                zoomControl: true, //enable zoom control
                zoomControlOptions: {
                style: google.maps.ZoomControlStyle.SMALL //zoom control size
            },
                scaleControl: true, // enable scale control
                mapTypeId: google.maps.MapTypeId.ROADMAP // google map type
            };

            map = new google.maps.Map(document.getElementById("map_container"), googleMapOptions);

            var marker = new google.maps.Marker({
                position: mapCenter,
                map: map
            });

            var infowindow = new google.maps.InfoWindow({
                content:"Hello World!"
            });

            infowindow.open(map,marker);
        }

        $(':submit').on('click', function() { // This event fires when a button is clicked
            $.ajax({ // ajax call starts
                  url: 'allCoordinates.php', // JQuery loads allCoordinates.php
                  dataType: 'json', // Choosing a JSON datatype
                  success: function(data) // Variable data contains the data we get from serverside
                  {
                      alert(data[0].latitude + " " + data[0].longitude);
                      coordinates = data;
                      parsedCoordinates = JSON.parse(coordinates);
                      update(parsedCoordinates);
                  }
            });
            return false; // keeps the page from not refreshing 
        });

        function update(markers){
            var infowindow = new google.maps.InfoWindow(), marker, i;

            google.maps.event.addListener(map, 'center_changed', function(event){
                for (i = 0; i < markers.length; i++) {  
                    marker = new google.maps.Marker({
                        position: new google.maps.LatLng(markers[i].latitude, markers[i].longitude),
                        map: map
                    });

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

                        return function() {
                            infowindow.setContent(markers[i].latitude + " " + markers[i].longitude);
                            infowindow.open(map, marker);
                        }
                    })(marker, i));
                }
            });
        }

    });

</script>
</head>

<body>
    <div class="container">
        <div id="filters_container">
                <fieldset>
                    <legend>Zona</legend>
                    <form id="submitForm" method="post" action="">
                        <select>.......</select>
                        <button type="submit">Cerca</button>
                    </form>
                </fieldset>

        </div>
        <div id="map_container"></div>
    </div>


</body>
</html>

the JSON returned is this:

[{"latitude":"45.648110","longitude":"11.497398"},
{"latitude":"45.511180","longitude":"11.511070"},
{"latitude":"45.649630","longitude":"12.304064"},
{"latitude":"45.722110","longitude":"11.435023"},
{"latitude":"45.391083","longitude":"11.276997"},
{"latitude":"45.691465","longitude":"11.483223"},
{"latitude":"45.659787","longitude":"11.795147"},
{"latitude":"45.720608","longitude":"11.453950"},
{"latitude":"45.718757","longitude":"11.333138"},
{"latitude":"45.607387","longitude":"11.497138"},
{"latitude":"46.099075","longitude":"12.160999"},
{"latitude":"45.523017","longitude":"10.152080"},
{"latitude":"45.408520","longitude":"10.838590"},
{"latitude":"45.717608","longitude":"11.462909"},
{"latitude":"45.395371","longitude":"11.274200"},
{"latitude":"45.555142","longitude":"11.543407"},
{"latitude":"45.693428","longitude":"11.446203"},
{"latitude":"44.661260","longitude":"10.886416"},
{"latitude":"45.530448","longitude":"11.499496"},
{"latitude":"45.530448","longitude":"11.499496"},
{"latitude":"22.318567","longitude":"114.179606"},
{"latitude":"45.443304","longitude":"10.952222"},
{"latitude":"45.836699","longitude":"12.014122"},
{"latitude":"45.803245","longitude":"11.355629"},
{"latitude":"45.722110","longitude":"11.435023"},
{"latitude":"45.803245","longitude":"11.355629"},
{"latitude":"45.836699","longitude":"12.014122"},
{"latitude":"45.779430","longitude":"11.429520"},
{"latitude":"45.803245","longitude":"11.355629"}]

The problem is that nothing changes; what am I doing wrong? Thanks!

  • 写回答

2条回答 默认 最新

  • doqw89029 2014-05-02 13:35
    关注

    I have managed to solve. Here is the code:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
        <script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer.js"></script>
        <script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"></script>
        <script type="text/javascript">
    
            $(document).ready(function(){
                var coordinates, parsedCoordinates;
                var map;
                var marker;
                var markers = [];
                var clusterer;
                var bounds = new google.maps.LatLngBounds();
                var coords = new google.maps.LatLng(0, 0);
                var infowindow = new google.maps.InfoWindow();
                map_initialize(); // load map
    
                function map_initialize(){
    
                    //Google map option
                    var googleMapOptions = 
                    {
                        center: coords,
                        zoom: 0, //zoom level, 0 = earth view to higher value
                        panControl: true, //enable pan Control
                        zoomControl: true, //enable zoom control
                        scaleControl: true, // enable scale control
                        mapTypeId: google.maps.MapTypeId.ROADMAP // google map type
                    };
    
                    map = new google.maps.Map(document.getElementById("map_container"), googleMapOptions);
                    //  Fit these bounds to the map
                    map.fitBounds(bounds);
    
                    // Marker Clusterer setup
                    var mcOptions = {
                      gridSize : 50,
                      maxZoom : 15
                    };
    
    
                }
    
                $(':submit').on('click', function() { // This event fires when a button is clicked
    
                    $.ajax({ // ajax call starts
                          url: 'allCoordinates.php', // JQuery loads allCoordinates.php
                          dataType: 'json', // Choosing a JSON datatype
                          success: function(data) // Variable data contains the data we get from serverside
                          {
                              for (i = 0; i < data.length; i++) {
                                bounds.extend(new google.maps.LatLng(data[i].latitude, data[i].longitude));
    
                                marker = new google.maps.Marker({
                                    position: new google.maps.LatLng(data[i].latitude, data[i].longitude),
                                    map: map,
                                    icon: 'http://maps.google.com/mapfiles/ms/icons/red.png'
                                });
    
                                google.maps.event.addListener(marker, 'click', (function(marker, i) {
                                    return function() {
                                        infowindow.setContent("Test");
                                        infowindow.open(map, marker);
                                    }
                                })(marker, i));
    
                                markers.push(marker);
                              }
                              // Fit these bounds to the map
                              map.fitBounds(bounds);
    
                              clusterer = new MarkerClusterer(map, markers);
                          }
                    });
                    return false; // keeps the page from not refreshing 
                });
            });
    
        </script>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号