php版本是5.6.36,apache服务器版本2.4.33,postgresql版本9.5.1
读的别人的代码,按理说直接部署好了就没问题。
初步怀疑是本地的php环境配置有问题,因为通过pg_query()函数返回来的应该是类似于数组的变量,但是现在返回的是字符串,不知道为什么。。。
php小白,接触这个项目没有玩过php,最近恶补,求大佬帮忙看看。涉及到部分gis知识,返回坐标。
返回链接
http://127.0.0.1:8092/nl/php/getpanoid.php?request=getpanoid&x=495550.6342606045&y=306595.50317500636&distance=300&callback=showSWFSV
php代码
<?php
$curPath = dirname(__FILE__).'/';
include($curPath ."ir.php");
$dbObj = new PgPanoService2($dbHost, $dbName, $dbUser, $dbPassword, $dbPort);
$dbObj->initDb();
$dbObj->_requestParams = $_REQUEST;
if(isset($_REQUEST["y"]) && isset($_REQUEST["x"])){
$x = floatval($_REQUEST["x"]);
$y = floatval($_REQUEST["y"]);
$dist = isset($_REQUEST["distance"])? floatval($_REQUEST["distance"]) :300;
$dist = $dist < 40 ? 40:$dist;
$dbObj->getPanoIdByXY($x,$y,$dist);
}
else{
$dbObj->printOpRes(400, "missing parameter x or y!");
}
?>
function getPanoIdByXY($x, $y, $buffer=200,$printTag = true){
$panoId = "null";
$rlArr = $this->getRoadLinesByXY($x, $y, $buffer);
if($rlArr && count($rlArr) > 0){
$rlCount = count($rlArr);
for($i = 0; $i < $rlCount; $i++){
$tmpRl = $rlArr[$i];
if($tmpRl){
$tmpPds = $tmpRl->getPdsByLimitDate($this->_limitDate);
//echo $tmpPds."\r\n";
if($tmpPds != ""){
$tableName = $this->getTableNameByPanoId($tmpPds, 0);
$tmpPanoId = $this->getPanoIdByXyAndTable($tableName, $x, $y, $buffer);
if($tmpPanoId != ""){
$panoId = $tmpPanoId;
break;
}
}
}
}
}
if($printTag){
$tmpResStr = '{"panoid":"'.$panoId.'","requestx":'.$x.',"requesty":'.$y.'}';
if($this->_requestParams && isset($this->_requestParams["callback"]) && $this->_requestParams["callback"] != ""){
$tmpResStr = $panoId;
}
$this->exportJson($tmpResStr);
}
else
return $panoId;
}
function getPanoIdByXyAndTable($tableName, $x, $y, $buffer=200){
$resStr = "";
if($this->_db){
$queryStr = "SELECT
a.name as name,
ST_Distance(ST_GeomFromText('POINT(".$x." ".$y.")', 900913), a.geom) as dist
FROM
".$tableName." as a
WHERE
ST_Contains(ST_Buffer(ST_GeomFromText('POINT(".$x." ".$y.")', 900913), ".$buffer."),a.geom)
order by dist ASC limit 1";
// var_dump($queryStr) ;exit;
$result = pg_query($this->_db,$queryStr);
var_dump($result);
if($result === FALSE || $result === TRUE || pg_num_rows($result) == 0){
return null;
}
else{
while($arr = pg_fetch_array($result)){
if($arr && $arr["name"] != ""){
$resStr = $arr["name"];
break;
}
}
}
}
return $resStr;
}
这是JS的报错啊,语法错误。