Javascript 使用PHP和JS更新Google地图上的标记

Javascript 使用PHP和JS更新Google地图上的标记,javascript,php,html,ajax,google-maps-api-3,Javascript,Php,Html,Ajax,Google Maps Api 3,我是新的网络开发,我需要一个帮助,请。 这是我的代码,它假设根据从数据库获得的坐标更新标记位置 <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=API_KEY&sensor=false"></script> <script type="text/javascript"> Markers(); function Markers() { v

我是新的网络开发,我需要一个帮助,请。 这是我的代码,它假设根据从数据库获得的坐标更新标记位置

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=API_KEY&sensor=false"></script>
<script type="text/javascript">


Markers();
function Markers() {

 var myvar = <?php echo json_encode($lat); ?>;
 var myvar2 = <?php echo json_encode($long); ?>;
 document.write(myvar ,myvar2 );

    markers = [
    {
        "title": 'Aksa Beach',
        "lat": myvar,
        "lng": myvar2,
        "description": 'Driver Name: Mohamed'
    },
    {
        "title": 'Juhu Beach',
        "lat": '19.0883595',
        "lng": '72.82652380000002',
        "description": 'Juhu Beach is one of favourite tourist attractions situated in Mumbai.'
    },
    {
        "title": 'Girgaum Beach',
        "lat": '18.9542149',
        "lng": '72.81203529999993',
        "description": 'Girgaum Beach commonly known as just Chaupati is one of the most famous public beaches in Mumbai.'
    },
    {
        "title": 'Jijamata Udyan',
        "lat": '18.979006',
        "lng": '72.83388300000001',
        "description": 'Jijamata Udyan is situated near Byculla station is famous as Mumbai (Bombay) Zoo.'
    },
    {
        "title": 'Sanjay Gandhi National Park',
        "lat": '19.2147067',
        "lng": '72.91062020000004',
        "description": 'Sanjay Gandhi National Park is a large protected area in the northern part of Mumbai city.'
    }
    ];
   //return markers;
    }


    window.onload = function () {
        LoadMap();
    };

    var map;
    var marker;
    function LoadMap() {
        var mapOptions = {
            center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
            zoom: 10,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);
        SetMarker(0);
    };

    //while loop to call to update lan/long
    function SetMarker(position) {
        //Remove previous Marker.
        if (marker != null) {
            marker.setMap(null);
        }

        //Set Marker on Map.
        var data = markers[position];
        var myLatlng = new google.maps.LatLng(data.lat, data.lng);
        marker = new google.maps.Marker({
            position: myLatlng,
            map: map,
            title: data.title
        });

        //Create and open InfoWindow.
        var infoWindow = new google.maps.InfoWindow();
        infoWindow.setContent("<div style = 'width:200px;min-height:40px'>" + data.description + "</div>");
        infoWindow.open(map, marker);
    };
</script>



<div>
    <label for="rbMarker0">
        <input type="radio" id="rbMarker0" name="rbMarker" value="0" onclick="SetMarker(this.value)"
          checked="checked"  />Driver Name: Mohamed </label><br />
    <label for="rbMarker1">
        <input type="radio" id="rbMarker1" name="rbMarker" value="1" onclick="SetMarker(this.value)" />Juhu
        Beach</label><br />
    <label for="rbMarker2">
        <input type="radio" id="rbMarker2" name="rbMarker" value="2" onclick="SetMarker(this.value)" />Girgaum
        Beach</label><br />
    <label for="rbMarker3">
        <input type="radio" id="rbMarker3" name="rbMarker" value="3" onclick="SetMarker(this.value)" />Jijamata
        Udyan</label><br />
    <label for="rbMarker4">
        <input type="radio" id="rbMarker4" name="rbMarker" value="4" onclick="SetMarker(this.value)" />Sanjay
        Gandhi National Park</label>
</div>
<hr />
<div id="dvMap" style="width: 400px; height: 500px">
</div>



<?php 

  include_once(dirname(__FILE__).'/connection.php');

while (1)
{
                  $sql = "SELECT * FROM `test2` WHERE  `ID` = 298";
                  $res = $mysqli->query($sql) or die($mysqli->error.__LINE__);

                 while( $row = $res->fetch_row() ){
                $long = $row[1];
                $lat = $row[2] ;
                 }


echo "<script> Markers(); </script>"; 
}

?>

标记();
函数标记(){
var myvar=;
var myvar2=;
文件编写(myvar,myvar2);
标记=[
{
“标题”:“阿克萨海滩”,
“lat”:myvar,
“液化天然气”:myvar2,
“说明”:“司机姓名:穆罕默德”
},
{
“标题”:“巨湖海滩”,
“lat”:“19.0883595”,
“液化天然气”:“72.82652380000002”,
“描述”:“巨湖海滩是孟买最受欢迎的旅游景点之一。”
},
{
“标题”:“吉尔高姆海滩”,
“lat”:“18.9542149”,
“液化天然气”:“72.812035299993”,
“描述”:“Girgaum海滩,俗称Chaupati,是孟买最著名的公共海滩之一。”
},
{
“标题”:“Jijamata Udyan”,
“lat”:“18.979006”,
“液化天然气”:“72.83388300000001”,
“描述”:“Jijamata Udyan位于Byculla车站附近,因孟买动物园而闻名。”
},
{
“标题”:“桑杰·甘地国家公园”,
“lat”:“19.2147067”,
“液化天然气”:“72.9106200000004”,
“描述”:“桑杰·甘地国家公园是孟买市北部的一个大型保护区。”
}
];
//返回标记;
}
window.onload=函数(){
LoadMap();
};
var映射;
var标记;
函数LoadMap(){
变量映射选项={
中心:新建google.maps.LatLng(标记[0].lat,标记[0].lng),
缩放:10,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=新的google.maps.map(document.getElementById(“dvMap”)、mapOptions;
设置标记(0);
};
//while循环调用以更新lan/long
功能设置标记(位置){
//删除上一个标记。
如果(标记!=null){
marker.setMap(空);
}
//在地图上设置标记。
var数据=标记[位置];
var mylatng=new google.maps.LatLng(data.lat,data.lng);
marker=新的google.maps.marker({
职位:myLatlng,
地图:地图,
标题:data.title
});
//创建并打开信息窗口。
var infoWindow=new google.maps.infoWindow();
infoWindow.setContent(“+data.description+”);
信息窗口。打开(地图、标记);
};
司机姓名:穆罕默德
巨虎 海滩
吉尔戈姆 海滩
吉贾马塔 乌迪亚
桑贾伊 甘地国家公园
有两个问题:

  • 第一:变量
    myvar
    myvar2
    总是
    null
    ,尽管我从数据库中获取了数据
  • 第二:只有当我从PHP代码中删除“while(1)”时,才会加载映射

PHP是一种脚本语言,目标是接收请求、处理请求、生成输出并完成脚本。如果未完成脚本,浏览器将始终认为脚本未完成,并显示页面仍在加载

带有while(true)或while(1)的绘图循环在php中几乎看不到。 您在脚本末尾声明了变量$long和$lat,它们的值在开始时为null,因为您以前从未声明过它们

要创建更干净的代码,请尝试将php、html和javascript分开。尽量避免更改函数范围之外的内容,如果函数中的某个参数发生了更改,请声明它

<?php
include_once(dirname(__FILE__).'/connection.php'); //there is also __DIR__

//while (1)
//{
                  $sql = "SELECT * FROM `test2` WHERE  `ID` = 298";
                  $res = $mysqli->query($sql) or die($mysqli->error.__LINE__);

                 while( $row = $res->fetch_row() ){
                $long = $row[1];
                $lat = $row[2] ;
                 }



//echo "<script> Markers(); </script>"; 
//}

?>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=API_KEY&sensor=false"></script>
<script type="text/javascript">

var myvar = <?php echo $lat;?>;
// we dont' need json encode, because we want the value directly echo json_encode($lat);      
var myvar2 = <?php echo $long;?>;
//json_encode($long); 
 //what should happen here? like this you replace the whole html document with myvar and myvar2 document.write(myvar ,myvar2 );





    markers = [
    {
        "title": 'Aksa Beach',
        "lat": myvar,
        "lng": myvar2,
        "description": 'Driver Name: Mohamed'
    },
    {
        "title": 'Juhu Beach',
        "lat": '19.0883595',
        "lng": '72.82652380000002',
        "description": 'Juhu Beach is one of favourite tourist attractions situated in Mumbai.'
    },
    {
        "title": 'Girgaum Beach',
        "lat": '18.9542149',
        "lng": '72.81203529999993',
        "description": 'Girgaum Beach commonly known as just Chaupati is one of the most famous public beaches in Mumbai.'
    },
    {
        "title": 'Jijamata Udyan',
        "lat": '18.979006',
        "lng": '72.83388300000001',
        "description": 'Jijamata Udyan is situated near Byculla station is famous as Mumbai (Bombay) Zoo.'
    },
    {
        "title": 'Sanjay Gandhi National Park',
        "lat": '19.2147067',
        "lng": '72.91062020000004',
        "description": 'Sanjay Gandhi National Park is a large protected area in the northern part of Mumbai city.'
    }
    ];

    var map;
    var marker;

    window.onload = function () {
        map = LoadMap();
    };


    function LoadMap() {
        var mapOptions = {
            center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
            zoom: 10,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);
        SetMarker(0, map);
        return map; // try to not change variables outside the function scope
    };

    //while loop to call to update lan/long
    function SetMarker(position, map) {
        //Remove previous Marker.
        if (marker != null) {
            marker.setMap(null);
        }

        //Set Marker on Map.
        var data = markers[position];
        var myLatlng = new google.maps.LatLng(data.lat, data.lng);
        marker = new google.maps.Marker({
            position: myLatlng,
            map: map,
            title: data.title
        });

        //Create and open InfoWindow.
        var infoWindow = new google.maps.InfoWindow();
        infoWindow.setContent("<div style = 'width:200px;min-height:40px'>" + data.description + "</div>");
        infoWindow.open(map, marker);
    };
</script>



<div>
    <label for="rbMarker0">
        <input type="radio" id="rbMarker0" name="rbMarker" value="0" onclick="SetMarker(this.value, map)"
          checked="checked"  />Driver Name: Mohamed </label><br />
    <label for="rbMarker1">
        <input type="radio" id="rbMarker1" name="rbMarker" value="1" onclick="SetMarker(this.value, map)" />Juhu
        Beach</label><br />
    <label for="rbMarker2">
        <input type="radio" id="rbMarker2" name="rbMarker" value="2" onclick="SetMarker(this.value, map)" />Girgaum
        Beach</label><br />
    <label for="rbMarker3">
        <input type="radio" id="rbMarker3" name="rbMarker" value="3" onclick="SetMarker(this.value, map)" />Jijamata
        Udyan</label><br />
    <label for="rbMarker4">
        <input type="radio" id="rbMarker4" name="rbMarker" value="4" onclick="SetMarker(this.value, map)" />Sanjay
        Gandhi National Park</label>
</div>
<hr />
<div id="dvMap" style="width: 400px; height: 500px">
</div>

var myvar=;
//我们不需要json encode,因为我们希望值直接回显json_encode($lat);
var myvar2=;
//json_编码($long);
//这里会发生什么?像这样,用myvar和myvar2 document.write(myvar,myvar2)替换整个html文档;
标记=[
{
“标题”:“阿克萨海滩”,
“lat”:myvar,
“液化天然气”:myvar2,
“说明”:“司机姓名:穆罕默德”
},
{
“标题”:“巨湖海滩”,
“lat”:“19.0883595”,
“液化天然气”:“72.82652380000002”,
“描述”:“巨湖海滩是孟买最受欢迎的旅游景点之一。”
},
{
“标题”:“吉尔高姆海滩”,
“lat”:“18.9542149”,
“液化天然气”:“72.812035299993”,
“描述”:“Girgaum海滩,俗称Chaupati,是孟买最著名的公共海滩之一。”
},
{
“标题”:“Jijamata Udyan”,
“lat”:“18.979006”,
“液化天然气”:“72.83388300000001”,
“描述”:“Jijamata Udyan位于Byculla车站附近,因孟买动物园而闻名。”
},
{
“标题”:“桑杰·甘地国家公园”,
“lat”:“19.2147067”,
“液化天然气”:“72.9106200000004”,
“描述”:“桑杰·甘地国家公园是孟买市北部的一个大型保护区。”
}
];
var映射;
var标记;
window.onload=函数(){
map=LoadMap();
};
函数LoadMap(){
变量映射选项={
中心:新建google.maps.LatLng(标记[0].lat,标记[0].lng),
缩放:10,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=新的google.maps.map(document.getElementById(“dvMap”)、mapOptions;
SetMarker(0,map);
return map;//尽量不要更改函数范围之外的变量
};
//while循环调用以更新lan/long
功能设置标记(位置、地图){
//删除上一个标记。
如果(标记!=null){
marker.setMap(空);
}
//在地图上设置标记。
var数据=标记[位置];
var mylatng=new google.maps.LatLng(data.lat,data.lng);
marker=新的google.maps.marker({
职位:myLatlng,
地图:地图,
标题:data.title
});
//创建并打开信息窗口。
弗吉尼亚州