【问题标题】:fetch data from database and plot it on google map从数据库中获取数据并将其绘制在谷歌地图上
【发布时间】:2015-02-07 00:42:48
【问题描述】:

我有一个包含 2 个下拉菜单的索引页。第二个下拉列表取决于第一个,从第二个列表中选择一个值后,根据所选值在数据库表中执行搜索,然后显示匹配结果。我想要的是正在显示的结果(在这种情况下,与结果相对应的纬度和经度)应该显示在谷歌地图上

目前为止的代码

主页上包含下拉菜单并显示地图的代码

<div class="showsearch" id="gmap_canvas">  //place where the ,ap should get displayed
</div> 

执行搜索以显示结果的代码,也应该适用于地图

<?php
include("connection.php");
if(isset($_POST['fname']))
    {
        $fname = mysqli_real_escape_string($con, $_POST['fname']);

        $sql1 = 'SELECT * FROM features_for_office WHERE fname LIKE "%'.$fname.'%"';
        $result = mysqli_query($con, $sql1);

        if (mysqli_num_rows($result) > 0) 
            {
                while($row = mysqli_fetch_assoc($result)) 
                    {
                        $latitude= $row["latitude"];
                        $longitude= $row["longitude"];
                    }
                    ?>


                    <!-- JavaScript to show google map -->


<div class="showsearch" id="gmap_canvas"></div> 
        <script>
        function init_map(lat,lang) {
        var myOptions = {
            zoom: 14,
            center: new google.maps.LatLng(lat, lang),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("gmap_canvas"), myOptions);
        marker = new google.maps.Marker({
            map: map,
            position: new google.maps.LatLng(<?php echo $latitude; ?>, <?php echo $longitude; ?>)
        });
        /*infowindow = new google.maps.InfoWindow({
            content: "<?php echo $formatted_address; ?>"
        });*/
        google.maps.event.addListener(marker, "click", function () {
            infowindow.open(map, marker);
        });
        infowindow.open(map, marker);
    }
    function loadCoordinates(){
        var latitude;
        var longitude;
               $('.showsearch').blur(function() {
             $.ajax({
                type: "GET",
                dataType: "json",
                url: "get_search_data.php",
                data: "name="+$(this).val(),
                success: function(json){
                $('#number').val(json.num);
                }
              });
         });
        //call the function once coordinates are available from the server/
        //init_map must be called from the call back of ajax function
        init_map(latitude,longitude);
    }
    //instead of init_map call the loadCoordinates to get the values from server
    google.maps.event.addDomListener(window, 'load', loadCoordinates);

                        </script>

       <?php }
        else 
            {
                echo "0 results";
            }
    mysqli_close($con);
    }
?>

虽然我得到了纬度和经度的值,但我无法显示地图以及特定纬度和经度上的标记。任何帮助将不胜感激

【问题讨论】:

  • 你的 div 和 php 脚本本身在同一个页面上,对吗?
  • @Shaikh Mohammed Shariq 不,他们在不同的页面上
  • 您的地图将在您指定的 div 中呈现,id 为“gmap_canvas”。您加载地图的脚本应该在您指定 div 的同一页面上,因为您的 div 是容器。如果您的 php 页面呈现地图的响应页面,那么您可以在 java 脚本标记上方定义 div 以显示地图。在此处查看 Javascript + HTML 的示例,其中 div 和 javascript 在同一页面上 developers.google.com/maps/documentation/javascript/examples/…

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


【解决方案1】:

考虑到您正在从服务器检索坐标值,您可以修改地图渲染代码以根据通过 AJAX 从服务器检索的纬度-经度值加载地图。在您想要显示地图的页面上,您可以使用下面提到的代码。

<div class="showsearch" id="gmap_canvas"> </div> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>    
<script type="text/javascript">
    function init_map(lat,lang) {
        var myOptions = {
            zoom: 14,
            center: new google.maps.LatLng(lat, lang),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("gmap_canvas"), myOptions);
        marker = new google.maps.Marker({
            map: map,
            position: new google.maps.LatLng(<?php echo $latitude; ?>, <?php echo $longitude; ?>)
        });
        /*infowindow = new google.maps.InfoWindow({
            content: "<?php echo $formatted_address; ?>"
        });*/
        google.maps.event.addListener(marker, "click", function () {
            infowindow.open(map, marker);
        });
        infowindow.open(map, marker);
    }
    function loadCoordinates(){
         $('.showsearch').blur(function() {
             $.ajax({
                type: "GET",
                dataType: "json",
                url: "get_search_data.php",
                data: "name="+$(this).val(),
                success: function(json){

                   var latitude;
                   var longitude;
                   latitude = LATITUDE_VALUE_FROM_SERVER;
                   longitude = LONGTITUDE_VALUE_FROM_SERVER;
                   init_map(latitude,longitude);
                }
              });
         });
    }
    //instead of init_map call the loadCoordinates to get the values from server
    google.maps.event.addDomListener(window, 'load', loadCoordinates);
</script>

您将需要使用 ajax 调用从服务器检索坐标值,并在 ajax 函数的回调中调用该函数以加载地图。

【讨论】:

  • 我已经编辑了 你可以通过它来请求 gp,因为即使在同一页面上编辑和组合了 div 和谷歌地图代码之后我我没有得到结果
  • @Sam 我已经编辑了我的答案,请检查成功功能并确保您正确设置了从服务器接收到的纬度和经度值。
猜你喜欢
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
相关资源
最近更新 更多