从mssql中检索值以向Google Maps添加新标记

时间:2011-04-23 16:19:28

标签: php sql-server google-maps google-maps-api-2

任何人都可以帮我处理这段代码......基本上我想从MSSQL数据库中输出带有标记位置的Google地图。我正在连接到数据库并从数据库输出数据而没有任何问题。我需要使用的数据库中的值是纬度和经度

我只需要一些帮助就可以将数据库中的纬度和经度信息转换为可以输入“var markers = createMarker”的数组。任何人都可以建议任何代码或建议吗?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
  Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html;
    charset=utf-8"/>
    <title>Google Maps JavaScript API Example</title>
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true_or_false&amp;key=ABQIAAAAFdAFQ5eUeLToBjop7wxvVRQwhZZS-c1L0GQSo2zewspgIUCbcBQLESvgR7pk_2Z2FMWsfROoCbyJrw" type="text/javascript"></script>
    <script type="text/javascript">
    //<![CDATA[
    function load() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(
        document.getElementById("map"));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.addMapType(G_SATELLITE_3D_MAP);
        map.setCenter(
        new GLatLng(37.4419, -122.1419), 13);
        function createMarker(point, text, title) {
          var marker =
          new GMarker(point,{title:title});
          return marker;
        }
        <?php


        $points = Array(
         "37.4389, -122.1389",
        "37.4419, -122.1419",
         "37.4449, -122.1449");
        foreach ($points as $key => $point) {
        ?>

        <!-- ADD NEW MARKERS FROM A DATABASE -->

        var marker = createMarker(  
        new GLatLng(<?php echo $point ?>)
        );
        map.addOverlay(marker);
        <?php } ?>
      }
    }
    //]]>
    </script>

  </head>
  <body onload="load()" onunload="GUnload()">


    <div id="map"
    style="width: 500px; height: 300px"></div>

    <?php
    /*data base connection */


    /* SQL query */
$tsql = ("SELECT gps_lat
      ,gps_long
  FROM location");

  $result = sqlsrv_query($conn,$tsql);

if( $result === false)
{
     echo "Error in query preparation/execution.\n";
     die( print_r( sqlsrv_errors(), true));
}



/*Display the table */
// keeps getting the next row until there are no more to get
while($points = sqlsrv_fetch_array( $result )) {
    echo $points['gps_lat'];
    echo ',';
    echo $points['gps_long'];
    echo "</br>";
}


/* Close the connection. */
sqlsrv_close( $conn);


?>
  </body>
</html>

我尝试使用以下方法创建新标记,但我没有成功。任何人都可以指出下面的代码有什么问题或者给我任何建议吗?

  //<![CDATA[
    function load() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(
        document.getElementById("map"));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.addMapType(G_SATELLITE_3D_MAP);
        map.setCenter(
        new GLatLng(37.4419, -122.1419), 13);
        function createMarker(point, text, title) {
          var marker =
          new GMarker(point,{title:title});
          return marker;
        }
        <?php
        /*data base connection */


        /* Connect using Windows Authentication */       
        $conn = sqlsrv_connect($serverName, $connectionOptions);

        /* Check whether connnection is established */
        if($conn === false)
        {
            die(print_r(sqlsrv_errors(), true));
        }

        /* SQL query */
        $tsql = ("SELECT TOP 10 gps_lat
                ,gps_long
                FROM location");

        $result = sqlsrv_query($conn,$tsql);

        if( $result === false)
        {
            echo "Error in query preparation/execution.\n";
            die( print_r( sqlsrv_errors(), true));
        }

/*
BELOW IS THE ADJUSTED WHILE LOOP
*/
while($row = sqlsrv_fetch_array( $result )) {
    $lat = $row['gps_lat'];
    $long = $row['gps_long'];

        ?>      
        var marker = createMarker(  
        new GLatLng(<?php echo $Lat.','.$Long;?>)
        );
        map.addOverlay(marker);
        <?php } ?>
      }
    }
    //]]>
    </script>

我认为这会相当简单,但我似乎无法理解它。如果有任何信息不清楚......

1 个答案:

答案 0 :(得分:0)

我确实设法通过整夜工作来解决问题,尝试加载不同的东西......检索值的代码如下。

    $lat=array();
    $long=array();
    while($points = sqlsrv_fetch_array($result)) {
    $lat[] = $points['gps_lat'];
    $long[] = $points['gps_long'];
    }


    $latLongSize = sizeof($lat)-1;

for($i=0; $i<=$latLongSize; $i++){ ?>

    var marker<?php echo $i; ?> = createMarker(new GLatLng(<?php echo $lat[$i];?>, <?php echo $long[$i]; ?>));  
        map.addOverlay(marker<?php echo $i; ?>);