【问题标题】:Passing PHP variables to the Google Maps API将 PHP 变量传递给 Google Maps API
【发布时间】:2016-01-26 06:26:05
【问题描述】:

当用户注册我的应用程序(大学项目)时,系统会要求他们提供地址。我将此地址转换为纬度和经度,然后将其存储在我的数据库中。

我像这样访问纬度和经度:

<?php
    require '../connect.php';
    session_start();
    $_SESSION['username'];

    $sql = "SELECT latitude, longitude FROM userinformation WHERE username = '". $_SESSION['username']. "'";
$result = $db->query($sql);

    if($result->num_rows > 0){
        while($row = $result->fetch_assoc()){
            $lat = $row["latitude"];
            $lng = $row["longitude"];
            echo $lat;
            echo $lng;

        }
    }
?>

然后我尝试将 $lat 和 $lng 变量传递给 Maps API 脚本,如下所示:

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 13,
    center: {lat: '<?php echo $lat;?>', lng: '<?php echo $lng;?>'}
  });

  marker = new google.maps.Marker({
    map: map,
    draggable: true,
    animation: google.maps.Animation.DROP,
    position: {lat: '<?php echo $lat;?>', lng: '<?php echo $lng;?>'}
  });
  marker.addListener('click', toggleBounce);
}

这给了我以下页面:

我也尝试将 PHP 变量转换为 JS:

var js_variable  = '<?php echo $lat;?>';
document.write(js_variable);
var js_variable1  = '<?php echo $lng;?>';
document.write(js_variable1);

然后我传入 JS 变量而不是 PHP 变量,但输出仍然相同。将变量作为 lat/lng 而不是硬编码值传递的正确方法是什么:

center: {lat: 59.325, lng: 18.070}
position: {lat: 59.327, lng: 18.067}

【问题讨论】:

  • PHP 在浏览器中解析为什么?如果它看起来与您在上面指定的“硬编码值”完全相同,it should just work(您可能不想使用文档写入来创建变量的“javascript”版本)
  • @geocodezip 在浏览器中,当我使用包含 lat/lng 的变量时,我只会得到一个空白的地图画布,但是如果我对这些值进行硬编码,那么我会得到一张地图。
  • 如果您在浏览器中查看源代码,这两个版本(工作/硬编码与来自 PHP 的不工作值)看起来是否相同? (我假设不是)。你能告诉我们有什么区别吗?
  • @geocodezip 当我运行硬编码值时,我得到: position: {lat: 30.365273, lng: -81.699600} 与 PHP 转义一样,我得到: position: {lat: '30.365273', lng :'-81.699600'}。所以''导致了问题,但他们需要逃避 PHP?

标签: javascript php google-maps


【解决方案1】:

当我替换 the fiddle with strings {lat: '30.365273', lng: '-81.699600'} 中的值时,我收到 API 报告的 javascript 错误:Assertion failed: InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number

如果我在这些字符串上使用parseFloat,它会起作用:

代码 sn-p:

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 13,
    center: {
      lat: parseFloat('30.365273'),
      lng: parseFloat('-81.699600')
    }
  });

  marker = new google.maps.Marker({
    map: map,
    draggable: true,
    animation: google.maps.Animation.DROP,
    position: {
      lat: parseFloat('30.365273'),
      lng: parseFloat('-81.699600')
    }
  });
  marker.addListener('click', toggleBounce);
}
google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map"></div>

将您的 PHP 更改为:

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 13,
    center: {lat: parseFloat('<?php echo $lat;?>'), lng: parseFloat('<?php echo $lng;?>')}
  });

  marker = new google.maps.Marker({
    map: map,
    draggable: true,
    animation: google.maps.Animation.DROP,
    position: {lat: parseFloat('<?php echo $lat;?>'), lng: parseFloat('<?php echo $lng;?>')}
  });
  marker.addListener('click', toggleBounce);
}

【讨论】:

  • 起初我得到一个空白的白色屏幕。然后我看到你忘记了 parseFloat 在 position : for lng.然而,这仍然没有解决空白屏幕的问题,我真的不明白为什么,因为 sn-p 可以工作并且它可以在 Jsfiddle 上工作。这是我的完整文件(尽管无论如何都在这里发布):gist.github.com/adhorrig/806e353c7a159bd6836d.
  • 没关系,它正在工作。我不小心删除了位置:。太感谢了!我现在试图解决这个问题五个小时。我很好奇为什么 parseFloat 解决了这个问题?
  • API 拒绝来自 PHP '&lt;?php echo $lat;?&gt;' 的字符串;那些必须是数字。 parseFloat 接受浮点数的字符串表示并将其转换为数字。
【解决方案2】:

我认为让 PHP 将值直接回显到您的 JavaScript 中可能是问题所在。尝试将 lat 和 lng 作为参数传递给 map 函数。

function initMap(myLat, myLng) {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 13,
    center: new google.maps.LatLng(myLat, myLong)
  });

  marker = new google.maps.Marker({
    map: map,
    draggable: true,
    animation: google.maps.Animation.DROP,
    position: new google.maps.LatLng(myLat, myLong)
  });
  marker.addListener('click', toggleBounce);
}

编辑:尝试使用谷歌地图功能设置纬度和经度,如上所述。

【讨论】:

  • 在 var map 之前,我尝试过像这样声明变量: var myLat = '';但是这个实现只是给了我一个空白的白色屏幕,与操作中的屏幕截图相反
  • 您可以尝试两件事:在函数范围之外声明变量,或者尝试使用 parseInt("str");函数来获取正在回显的任何 php 的整数值,例如var strLat = '' 和 var myLat = parseInt(strLat);
  • 嗯。我已经尝试了这两种方法,但仍然没有工作。这是一个艰难的过程,我正在努力了解为什么它在这一点上不起作用。
  • 传递硬编码值时地图是否正确呈现?
  • 是的,我的数据库中的坐标值是有效的纬度/经度。
猜你喜欢
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 2020-01-24
  • 2011-06-01
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多