Php 如何从Google Maps中的XML文件加载标记
我在谷歌地图中显示XML文件时遇到问题 我的概念:MySQL->XML->ShowtoGMAP 这是我的密码: Index.phpPhp 如何从Google Maps中的XML文件加载标记,php,mysql,xml,google-maps,google-maps-api-3,Php,Mysql,Xml,Google Maps,Google Maps Api 3,我在谷歌地图中显示XML文件时遇到问题 我的概念:MySQL->XML->ShowtoGMAP 这是我的密码: Index.php <!DOCTYPE html > <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="content-type" content="text/html; charse
<!DOCTYPE html >
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>ODP Tracking</title>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js"></script>
<script type="text/javascript">
var customIcons = {
FTTH: {
icon:"/images/ico_tag.png"
},
MSAN: {
icon:"/images/ico_tag_ms.png"
},
DSLAM: {
icon:"/images/ico_tag_ds.png"
},
bar: {
icon:'http://labs.google.com/ridefinder/images/mm_20_red.png'
}
};
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(load);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
function updateMarkerPosition(latLng) {
document.getElementById('latitude').value = [latLng.lat()]
document.getElementById('longitude').value = [latLng.lng()]
}
function load(position) {
var map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(position.coords.latitude,position.coords.longitude),
zoom: 17,
mapTypeId: 'roadmap'
});
var infoWindow = new google.maps.InfoWindow;
var latLng = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var url = "phpsqlajax_genxml.php";
var marker2 = new google.maps.Marker({
position : latLng,
title : 'Lokasi',
map : map,
draggable : false
});
// Change this depending on the name of your PHP file
downloadUrl(url, function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name");
var kap = markers[i].getAttribute("kap");
var avai = markers[i].getAttribute("avai");
var type = markers[i].getAttribute("type");
var note = markers[i].getAttribute("ket");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lang")));
var html = "<b>" + name + "</b> <br/>ALPRO : " + type + "<br/>KAP : " + kap + "<br/>AVAI : " + avai + "<br/>KETERANGAN : " + ket ;
var icon = customIcons[type] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon
});
bindInfoWindow(marker, marker2, map, infoWindow, html);
}
});
updateMarkerPosition(latLng);
google.maps.event.addListener(marker2, 'drag', function() {
updateMarkerPosition(marker2.getPosition());
});
}
function bindInfoWindow(marker, marker2, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker, marker2);
});
}
function downloadUrl(url, callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
function doNothing() {}
</script>
</head>
<body onload="getLocation()">
<style>
html, body, #map {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
#map {
position: relative;
}
</style>
<div id="map"></div>
</body>
</html>
ODP跟踪
var customIcons={
FTTH:{
图标:“/images/ico_tag.png”
},
MSAN:{
图标:“/images/ico_tag_ms.png”
},
DSLAM:{
图标:“/images/ico_tag_ds.png”
},
酒吧:{
图标:'http://labs.google.com/ridefinder/images/mm_20_red.png'
}
};
函数getLocation(){
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(加载);
}否则{
x、 innerHTML=“此浏览器不支持地理位置。”;
}
}
函数更新标记位置(latLng){
document.getElementById('latitude')。值=[latLng.lat()]
document.getElementById('longitude')。值=[latLng.lng()]
}
功能负载(位置){
var map=new google.maps.map(document.getElementById(“map”){
中心:新的google.maps.LatLng(位置.坐标.纬度,位置.坐标.经度),
缩放:17,
mapTypeId:“路线图”
});
var infoWindow=new google.maps.infoWindow;
var latLng=new google.maps.latLng(position.coords.latitude,position.coords.longitude);
变量纬度=位置坐标纬度;
var经度=position.coords.longitude;
var url=“phpsqlajax\u genxml.php”;
var marker2=新的google.maps.Marker({
位置:latLng,
标题:“Lokasi”,
地图:地图,
可拖动:错误
});
//根据PHP文件的名称更改此选项
下载url(url、函数(数据){
var xml=data.responseXML;
var markers=xml.documentElement.getElementsByTagName(“标记”);
对于(var i=0;iALPRO:“+type+”
KAP:“+KAP+”
avi:“+avi+”
凯特兰根:“+ket;
var icon=customIcons[type]| |{};
var marker=new google.maps.marker({
地图:地图,
位置:点,,
图标:icon.icon
});
bindInfoWindow(marker、marker2、map、infoWindow、html);
}
});
更新市场定位(latLng);
google.maps.event.addListener(marker2,'drag',function(){
updateMarkerPosition(marker2.getPosition());
});
}
函数bindInfoWindow(marker、marker2、map、infoWindow、html){
google.maps.event.addListener(标记'click',函数(){
setContent(html);
打开(地图、标记、标记2);
});
}
函数下载url(url,回调){
var请求=window.ActiveXObject?
新的ActiveXObject('Microsoft.XMLHTTP'):
新的XMLHttpRequest;
request.onreadystatechange=函数(){
if(request.readyState==4){
request.onreadystatechange=doNothing;
回调(请求、请求、状态);
}
};
打开('GET',url,true);
请求发送(空);
}
函数doNothing(){}
html,body,#map{
宽度:100%;
身高:100%;
保证金:0;
填充:0;
}
#地图{
位置:相对位置;
}
这是我的XML解析代码
phpsqlajax_genxml.php
<?php
require("phpsqlajax_dbinfo.php");
function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$xmlStr);
$xmlStr=str_replace("-",'-',$xmlStr);
$xmlStr=str_replace("/",'/',$xmlStr);
return $xmlStr;
}
// Create connection
$conn = new mysqli('localhost', $username, $password, $database);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);}
// Select all the rows in the markers table
$sql = "SELECT * FROM koordinat_odp";
$result = $conn->query($sql);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
header("Content-type: text/xml");
// Start XML file, echo parent node
echo '<markers>';
// Iterate through the rows, printing XML nodes for each
while ($row = $result->fetch_assoc()){
// ADD TO XML DOCUMENT NODE
echo '<marker ';
echo 'name="' . parseToXML($row['nama_dp']) . '" ';
echo 'kap="' . $row['kap'] . '" ';
echo 'avai="' . $row['avai'] . '" ';
echo 'lat="' . $row['lat'] . '" ';
echo 'lang="' . $row['lang'] . '" ';
echo 'type="' . $row['jenis_alpro'] . '" ';
echo 'ket="' . $row['note'] . '" ';
echo '/>';
}
// End XML file
echo '</markers>';
?>
connect\u错误){
die(“连接失败:“.$conn->connect_error);}
//选择标记表中的所有行
$sql=“选择*来自协调的odp”;
$result=$conn->query($sql);
如果(!$result){
die('无效查询:'.mysql_error());
}
标题(“内容类型:text/xml”);
//启动XML文件,回显父节点
回声';
//遍历行,为每个行打印XML节点
而($row=$result->fetch_assoc()){
//添加到XML文档节点
回声';
}
//结束XML文件
回声';
?>
我的问题是:它不能在地图上显示标记,我自己在浏览器中生成xml文件,它可以工作,但不能在GMAP中显示
提前感谢您的帮助。我想您的答案可以找到
您为什么要使用XML而不是JSON?能否提供XML输出的示例?(这表明你的问题是最好的)@JoshHarington:对不起,伙计,我不太了解你的问题json@geocodezip:已经尝试过了,但我的代码与此相同,没有希望:'(
function parseXML(xml){
var bounds = new google.maps.LatLngBounds();
$(xml).find("marker").each(function(){
//Read the name, address, latitude and longitude for each Marker
var name = $(this).find('name').text();
var kap = $(this).find('kap').text();
var avai = $(this).find('avai').text();
var note = $(this).find('ket').text();
var type = $(this).find('type').text();
var lat = $(this).find('lat').text();
var lng = $(this).find('lng').text();
var markerCoords = new google.maps.LatLng(parseFloat(lat),
parseFloat(lng));
bounds.extend(markerCoords);
var marker = new google.maps.Marker({position: markerCoords, map:map});
});
map.fitBounds(bounds);
}