我有一个问题,无法解决:)
基本上我有一个基于php / mysql的系统和一个表,其中包含一组经纬度点。
另一方面,我有一个带有Google Maps的iOS应用,当摄像头位置更改时,我提交了用户正在观察的当前区域的上/左,下/右点(这是我所需要的,我不需要地图的视觉点)。
我需要能够通过给定边界“框”(位于地球上的矩形区域)并具有顶部/左侧,底部/右侧点来查找这些点的特定子集。
这行得通-没问题。
但是,当地图自由旋转时-由于顶部/左侧,底部/右侧点的方向发生了变化,所以事情完全出错了,当然,.. mysql查询什么也没发现。
现在..我想到解决的办法是也可以旋转矩形区域-但是问题是用户可以自由旋转地图,到了一瞬间矩形区域不再是矩形了,我什至都不知道。确定在此阶段如何获取积分:)
有没有人遇到过此类问题,您如何解决?
PS:是的,最简单的方法是使用圆形区域和给定的中心点,但是..我的客户正在调用它...:/
首先创建包含旋转矩形的边界框,然后将边界框的坐标发送到php / MySQL,然后使用pointInPolygon()消除旋转矩形外部的点。
用于将边界框坐标发送到php / MySQL文件的javascript代码
function searchLocations(){
var bounds = new google.maps.LatLngBounds();
var url = "dbtoJSON.php";
url +="?maxLat="+maxLat +"&minLat="+minLat +"&maxLng="+maxLng +"&minLng="+minLng;
$.getJSON(url,function(data) {
$.each(data.marker,function(i,dat){
if (pointInPolygon(polySides,polyLat,polyLng,dat.lat,dat.lng)){
var latlng = new google.maps.LatLng(dat.lat,dat.lng);
addMarker(latlng,dat.name);
bounds.extend(latlng);
}//
});
map.fitBounds(bounds);
});
}
function pointInPolygon(polySides,polyX,polyY,x,y) {
var j = polySides-1 ;
oddNodes = 0;
for (i=0; i<polySides; i++) {
if (polyY[i]<y && polyY[j]>=y || polyY[j]<y && polyY[i]>=y) {
if (polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x) {
oddNodes=!oddNodes;
}
}
j=i; }
return oddNodes;
}
php / MySQL文件dbtoJSON.php
// Get parameters from URL
$maxLat = $_GET["maxLat"];
$minLat = $_GET["minLat"];
$maxLng = $_GET["maxLng"];
$minLng = $_GET["minLng"];
//array to hold location array
$arr = array();
// Prepare statement
$stmt = $dbh->prepare("SELECT name, lat, lng FROM gbstn WHERE (lat BETWEEN ? AND ? )AND (lng BETWEEN ? AND ?)");
// Assign parameters
$stmt->bindParam(1,$minLat);
$stmt->bindParam(2,$maxLat);
$stmt->bindParam(3,$minLng);
$stmt->bindParam(4,$maxLng);
//Execute query
$stmt->setFetchMode(PDO::FETCH_OBJ);
$stmt->execute();
//Show the results
while($obj = $stmt->fetch()) {
$arr[] = $obj;
}
if (count($arr) >= 1)
{
echo '{"marker":'.json_encode($arr).'}';
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句