在给定范围内找到经度/纬度点

马丁·科瓦切夫(Martin Kovachev)

我有一个问题,无法解决:)

基本上我有一个基于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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

确定位置(纬度,经度)是否在给定位置(纬度,经度)的半径范围内的算法

来自分类Dev

在r中找到特定纬度/经度范围内的位置

来自分类Dev

在纬度/经度范围内返回结果

来自分类Dev

生成给定点 10 公里范围内的纬度/经度列表

来自分类Dev

猫鼬查询范围内的纬度/经度

来自分类Dev

如何将传单标记的点放在给定的纬度/经度坐标上?

来自分类Dev

在给定中心点和半径的情况下获取边界框的经度/纬度值

来自分类常见问题

在给定范围内查找最大序列-Spark / Scala

来自分类Dev

如何快速检查整数是否在给定范围内

来自分类Dev

如何确保Maven依赖项在给定范围内?

来自分类Dev

计数在给定的范围内的半素数[a..b]

来自分类Dev

在给定范围内生成随机整数和实数

来自分类Dev

如何在给定范围内拆分数字

来自分类Dev

在给定范围内多次复制xml元素

来自分类Dev

查找在给定时间范围内修改的文件

来自分类Dev

在给定范围内的matplotlib等高线图

来自分类Dev

检查数字是否在给定范围内的替代方法?

来自分类Dev

如何确保Maven依赖项在给定范围内?

来自分类Dev

查找落在给定范围内的索引

来自分类Dev

在给定公差范围内的清洁列表<double []>

来自分类Dev

在给定的时间范围内清除每个通知javascript

来自分类Dev

将随机复数限制在给定范围内

来自分类Dev

如何仅在经度和纬度在给定距离内时显示查询结果

来自分类Dev

Windows Phone根据我的经度和纬度在6公里范围内获取附近的纬度和经度

来自分类Dev

找到几个点之间的距离-纬度/经度

来自分类Dev

开放层未在给定纬度,经度中显示标签

来自分类Dev

如何在给定范围内找到具有一定余数的值,然后将其除以给定数字?

来自分类常见问题

如何检查给定的小时和分钟(整数)是否在给定的时间范围内?

来自分类Dev

在给定范围内生成N个随机数,这些总和等于给定总和

Related 相关文章

  1. 1

    确定位置(纬度,经度)是否在给定位置(纬度,经度)的半径范围内的算法

  2. 2

    在r中找到特定纬度/经度范围内的位置

  3. 3

    在纬度/经度范围内返回结果

  4. 4

    生成给定点 10 公里范围内的纬度/经度列表

  5. 5

    猫鼬查询范围内的纬度/经度

  6. 6

    如何将传单标记的点放在给定的纬度/经度坐标上?

  7. 7

    在给定中心点和半径的情况下获取边界框的经度/纬度值

  8. 8

    在给定范围内查找最大序列-Spark / Scala

  9. 9

    如何快速检查整数是否在给定范围内

  10. 10

    如何确保Maven依赖项在给定范围内?

  11. 11

    计数在给定的范围内的半素数[a..b]

  12. 12

    在给定范围内生成随机整数和实数

  13. 13

    如何在给定范围内拆分数字

  14. 14

    在给定范围内多次复制xml元素

  15. 15

    查找在给定时间范围内修改的文件

  16. 16

    在给定范围内的matplotlib等高线图

  17. 17

    检查数字是否在给定范围内的替代方法?

  18. 18

    如何确保Maven依赖项在给定范围内?

  19. 19

    查找落在给定范围内的索引

  20. 20

    在给定公差范围内的清洁列表<double []>

  21. 21

    在给定的时间范围内清除每个通知javascript

  22. 22

    将随机复数限制在给定范围内

  23. 23

    如何仅在经度和纬度在给定距离内时显示查询结果

  24. 24

    Windows Phone根据我的经度和纬度在6公里范围内获取附近的纬度和经度

  25. 25

    找到几个点之间的距离-纬度/经度

  26. 26

    开放层未在给定纬度,经度中显示标签

  27. 27

    如何在给定范围内找到具有一定余数的值,然后将其除以给定数字?

  28. 28

    如何检查给定的小时和分钟(整数)是否在给定的时间范围内?

  29. 29

    在给定范围内生成N个随机数,这些总和等于给定总和

热门标签

归档