此问题与上一个问题有关:将XML传递给Javascript,以便在Google地图中显示由via8321提供的标记,并在2014年3月25日由aSeptik提供。
[Passing XML to Javascript to show markers in Google map
该代码基于上面提到的上一个答案(参见示例演示:[http://so.devilmaycode.it/passing-xml-to-javascript-to-show-markers-in-google-map][1]
)尝试创建一个搜索半径模块,用户选择一个半径,并从MySQL数据库中检索位置并输出为地图和标记。我遇到类似于via8321的问题,我可以获得XML输出(XML doc),但不能渲染成地图和标记。数据是正确的。
我使用了一个智慧的答案,并且能够让模块独立运行。根据via8321和aSeptik的评论,关键是从POST或GET更改为REQUEST,收集表单变量以传递给MySQL查询并从构建节点更改后端php文件,并将XML函数保存为使用xml_entities和.implode。我还将表单输入从选择列表更改为简单输入字段。它将半径传递给SQL查询。
现在,我正在尝试将其集成到具有不同MySQL数据库的更大应用程序中。但现在我遇到了和以前一样的问题。我只能获得XML输出,没有地图和标记。这似乎和以前一样。
有谁知道具体问题是什么?任何帮助,将不胜感激。谢谢。 (代码如下):
这是包含前端表单和map的mapsearch.php:
<?php
session_start();
include_once("includes/config.php");
$s_pid = $_SESSION['pid'];
$sqlCommand = "SELECT * from kusers_tbl WHERE PID = '$s_pid'";
$result = mysql_query($sqlCommand);
$row = mysql_fetch_row($result);
$center_lat = $row[14];
$center_lng = $row[15];
$_SESSION['user_lat'] = $row[14];
$_SESSION['user_lng'] = $row[15];
?>
<!DOCTYPE html>
<head>
<title>Map Search</title>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
//<![CDATA[
var map = null;
function load() {
var center_lat = <?php echo ($center_lat); ?>
var center_lng = <?php echo ($center_lng); ?>
var center = new google.maps.LatLng(center_lat, center_lng);
map = new google.maps.Map(document.getElementById("map"), {
center: center,
zoom: 11,
mapTypeId: 'roadmap'
});
}
function bindInfoWindow(marker, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
});
}
function searchLocations(){
var infoWindow = new google.maps.InfoWindow;
var searchterm = document.getElementById('searchterm').value;
jQuery.ajax({
dataType :'xml',
type: 'GET',
url : 'mapsearchdb.php?searchterm='+searchterm,
success:function(data){
var markers = data.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var firstName = markers[i].getAttribute("firstName");
var staddress = markers[i].getAttribute("staddress");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("latitude")),
parseFloat(markers[i].getAttribute("longitude")));
var html = '<p><a href="https://en.wikipedia.org/w/index.php?title=Uluru&oldid=297882194">'+
firstName + '</a><br/>' + staddress;
var marker = new google.maps.Marker({
map: map,
position: point
});
google.maps.event.addListener(markers[i], 'click', function(){
window.location.href = markers[i].url;
});
bindInfoWindow(marker, map, infoWindow, html);
}
}});
return false;
}
//]]>
</script>
</head>
<body onload="load()">
<p>Enter your radius for your tenant search (in miles).
<form id="searchform" method="post" action="mapsearchdb.php">
<input name="searchterm" size="3" id="searchterm"/>
<button type="submit" onclick="searchLocations();"/>Search</button>
</form>
</p>
<div id="map" style="width: 600px; height: 400px"></div>
</body>
这是mapsearchdb.php后端php文件,它接受半径输入,中心坐标计算最近的位置并从db中提取它们(来自kusers_tbl的SQL查询)并生成XML输出:
<?php
session_start();
include_once("includes/config.php");
$s_pid = $_SESSION['pid'];
$center_lat = ( isset( $_SESSION['user_lat'] ) ? $_SESSION['user_lat'] : 44.98); # You could replace these "0"s with the
$center_lng = ( isset( $_SESSION['user_lng'] ) ? $_SESSION['user_lng'] : -93.26 ); # Lat/Lng of a default location.
function xml_entities($value) {
return strtr(
$value,
array(
"<" => "<",
">" => ">",
'"' => """,
"'" => "'",
"&" => "&",
)
);
}
if(isset($_REQUEST['searchterm'])){
$searchterm = mysql_real_escape_string(trim($_REQUEST['searchterm']));
// Search the rows in the markers table
$query = sprintf("SELECT firstName, staddress, latitude, longitude, usertype, ( 3959 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance FROM kusers_tbl HAVING distance <= '%s' AND usertype='Renter' ORDER BY distance LIMIT 10",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($searchterm));
$result = mysql_query($query);
if (!$result) {
die("Invalid query: " . mysql_error());
}
$markers = array();
while ($row = @mysql_fetch_assoc($result)){
extract($row);
$markers[] = "<marker firstName='".xml_entities($firstName)."' staddress='".xml_entities($staddress)."' latitude='{$latitude}' lng='{$longitude}' />";
}
if(count($markers)){
header("Content-type: text/xml");
echo '<markers>'.implode('', $markers).'</markers>';
}
}
?>
XML输出(与我发布的上一个问题格式相同 - 只是不同的数据/表格):
此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。
<markers>
<marker firstName="Lucy" staddress="2014 Goodrich Ave." latitude="44.93792130" lng="-93.18552530"/>
<marker firstName="Bob" staddress="1250 Jefferson Ave." latitude="44.93056750" lng="-93.15305010"/>
</markers>
答案 0 :(得分:0)
我已经回答了类似的问题,解析XML来创建标记。请参阅:How to show location on a map taking longitude and latitude values from XML