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
});
//创建并打开信息窗口。
弗吉尼亚州