【问题标题】:Why am I getting "InvalidValueError: not a LatLng or LatLngLiteral"?为什么我收到“InvalidValueError:不是 LatLng 或 LatLngLiteral”?
【发布时间】:2019-01-05 02:19:06
【问题描述】:

使用 Google Map API 编写交付服务 Web 应用程序。在我开始使用多 dem 数组作为 LatLng 参考之前,一直没有问题。现在我遇到了这个奇怪的错误--

"InvalidValueError: 不是 LatLng 或 LatLngLiteral"

我之前对 LatLng 使用了类似的数组引用,没有问题,但现在它是多 dem 数组,我得到了这个奇怪的错误。

<?php
session_start();

require 'ConnectTest.php';

            // IF YOU'RE NOT LOGGED IN, KICK BACK TO LOGIN SCREEN
            if(!isset($_SESSION['username']) || !isset($_SESSION['password'])){

                header("Location:signin.php");
            }


            $servername = "localhost:3306";
            $user = "sonic_client";
            $pass = "client";
            $dbName = "sonicStrains";

            $drop = "DROP TABLE ".$_SESSION['username']."_deliveries";
            mysqli_query($server, $drop);

            //CREATE INDIVIDUAL DRIVER TABLE TO HOLD DELIVERIES
            $createQuery = "CREATE TABLE ".$_SESSION['username']."_deliveries (
                transaction_id VARCHAR(13),
                timePaid INT(11),
                username VARCHAR(30),
                user_location VARCHAR(255),
                user_lat float(10,6),
                user_long float(10,6),
                item_name VARCHAR(20),
                item_quantity float,
                driver_username VARCHAR(60),
                driver_lat float(10,6),
                driver_long float(10,6),
                on_delivery tinyint(1))";

            $created = mysqli_query($server, $createQuery);

            if ($created){

                //query the deliveries for open deliveries up untill 5 deliveries
                $queryString = "SELECT * FROM deliveries LIMIT 5";

                $query = mysqli_query($server, $queryString);

                if($query){


                    // CREATE ARRAY TO HOLD QUERY ROWS
                    $rows = array();

                    while($queryresult = mysqli_fetch_assoc($query)){

                        $rows[] = $queryresult;


                    }



                    echo floatval($rows[0]['user_lat']);
                    echo"<br>";

                    //INSERT & UPDATE THE TABLES WITH DELIVERY QUERIES
                    foreach($rows as $row){



                        // INSERT INTO INDIVIDUAL DRIVER TABLE
                        $insertQuery = "INSERT INTO ".$_SESSION['username']."_deliveries (transaction_id, user_location, user_lat, user_long) VALUES('$row[transaction_id]', '$row[user_location]', '$row[user_lat]', '$row[user_long]')";
                        $insertExec = mysqli_query($server, $insertQuery);



                        // UPDATE MASTER LIST OF DELIVERIES SO THAT OTHER DRIVERS DONT QUERY SAME ORDER
                        $updateQuery = "UPDATE deliveries SET on_delivery=true, driver_username='$_SESSION[username]' WHERE transaction_id='$row[transaction_id]'";
                        $updateExec = mysqli_query($server, $updateQuery);



                    }

                }else{echo mysqli_error($server);}




            }else{echo mysqli_error($server);}


            if(isset($_GET['pop'])){


                array_shift($rows);
                echo print_r($rows);
            }

            echo<<<_

                        <!DOCTYPE html>
                        <html>

                        <head>

                        <meta name="viewport" content="width=device-width, initial-scale=1">
                        <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">


                        </head> 



                        <body>

                        <div class="Banner">
                            <div class="TitleText">Sonic Strains &copy;</div>
                        </div>


                        <div class="login">Logout</div>
                        <div class="gallery" id="container">
                            <div class="map" id="mapInsert"></div>
                            <div class="navButton">Start Nav</div><div class="orderButton">Order Details</div>
                            <div class="abortButton">Abort</div><div class="confirmButton" onclick="shiftOrder()">Confirm</div><div class="disclaimer"></div>
                        </div>


                        <script>




                              function initMap() {

                                navigator.geolocation.getCurrentPosition(function(position) {




                                    var initialLocation = {lat:$rows[0]['user_lat'], lng:$rows[0]['user_long']};
                                    var Map = new google.maps.Map(document.getElementById('mapInsert'));
                                    Map.setCenter(initialLocation);
                                    Map.setZoom(13);
                                    // MAKE ANOTHER MARKER FOR THE CLIENT LOCATION
                                            var userLocation = {lat:$rows[0]['user_lat'], lng:$rows[0]['user_long']};
                                            var marker = new google.maps.Marker({
                                                position:userLocation, 
                                                map:Map,
                                                draggable:false, 
                                                clickable:false
                                                });
                                            marker.setMap(Map);



                                }, function(positionError) {

                                    alert('Location could not be found');
                                  },{enableHighAccuracy:true, timeout: 3000, maximumAge:1000});

                              } 

                              function shiftOrder(){

                                  var http = new XMLHttpRequest();
                                  http.onreadystatechange = function(){
                                      console.log(this.responseText);

                                  }
                                  http.open("GET", "driverIndex.php?pop='pop'", true);
                                  http.send();

                              }


                        </script>
                        <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=[API_KEY]&callback=initMap" 
                            async defer></script>




                        </body>
                        </html>

_;

?>  

这里是 ref 数组的一个元素——

  array(5) { [0]=> array(12) { ["transaction_id"]=> string(13) "5c2fb27078926" ["timePaid"]=> string(1) "0" ["username"]=> string(0) "" ["user_location"]=> string(44) "1301 Bataan St NW, Washington, DC 20036, USA" ["user_lat"]=> string(9) "38.907246" ["user_long"]=> string(10) "-77.037292" ["item_name"]=> string(18) "girl_scout_cookies" ["item_quantity"]=> string(1) "1" ["driver_username"]=> string(7) "Driver1" ["driver_lat"]=> string(8) "0.000000" ["driver_long"]=> string(8) "0.000000" ["on_delivery"]=> string(1) "1" } 

再次,我尝试使用 floatval() 解析 lat & long,因为它说它不是数字

  var initialLocation = {lat:floatval($rows[0]['user_lat']), lng:floatval($rows[0]['user_long'])};

但我得到--“floatval 未定义”

【问题讨论】:

  • 提供给浏览器的代码是什么样的?

标签: javascript php html google-maps


【解决方案1】:

PHP 变量不在括号内 --

var initialLocation = {lat:{$rows[0]['user_lat']}, lng:{$rows[0]['user_long']}};

【讨论】:

  • 抱歉,现在我看到您为 HTML 创建了一个“heredoc”字符串。尝试这样做:{$rows[0]['user_lat']}(大括号之间的变量)。
  • 成功了。我的问题是为什么?为什么在某些情况下需要将 php 变量括起来?
  • 因为您使用的是“heredoc”字符串,并且为了打印数组项,需要在大括号之间放置,请查看 示例 3 上的 link
  • 谢谢,但是虽然文档确实给出了在 heredoc 中使用括号的相关示例,但它并没有具体解决使用“括号”表示复杂变量的使用,即“管理括号使用的规则”。只说双引号和单引号,而不是括号,除非我忽略了什么。
  • 不客气!没错,括号的使用隐含在文档中。并且是“括号”而不是“大括号”......我的错......
猜你喜欢
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 2020-01-30
相关资源
最近更新 更多