Google Maps API坐标范围计算

时间:2014-06-12 23:46:18

标签: google-maps-api-3 coordinates geocoding latitude-longitude google-geocoder

以下问题:我有一个带引脚坐标(lat,lng)的数据库表。我将我的地图当前边界发送到后端,从数据库中选择可见的引脚。我的代码(cakePHP)如下:

private function getMapData($level = 1)
{
    $x1 = $this->request->query('x1');
    $x2 = $this->request->query('x2');
    $y1 = $this->request->query('y1');
    $y2 = $this->request->query('y2');

    if ($x1 > $x2)
    {
        $tmp = $x1;
        $x1 = $x2;
        $x2 = $tmp;
    }
    if ($y1 > $y2)
    {
        $tmp = $y1;
        $y1 = $y2;
        $y2 = $tmp;
    }


    return $this->Map->find('all',
        array(
            'fields' => array(
                'Map.lat',
                'Map.lng',
                'Map.level_number'
            ),
            'conditions' => array('Map.level_number' => $level,
            'Map.lat BETWEEN ? AND ?' => array($x1, $x2),
            'Map.lng BETWEEN ? AND ?' => array($y1, $y2),
            ),

            'group' => 'Map.lat, Map.lng, Map.level_number' //for distinct values
        ));
}

查询只是选择带边界坐标的引脚'范围。它大部分时间都有效,并且哪个角落的第一个角落 - 左/右/上/下都无关紧要。
但有时这个简单的计算似乎不起作用 我得到了界限和中心点。如果我对中心点应用计算,它有时不在界限范围内,这实际上是奇怪的,但它确实是正确的数据。所以我怀疑在这个界限计算中还有其他的东西我没有想到 以下是我得到的参数示例:?x1 = 68.62149425024305& y1 = 150.81473437500006& x2 = -16.728397127562125& y2 = 173.31473437500006& x = 36.520571863374705& y = -377.93526562499994& z = 3
x1和y1是角点1 x2,y2角点2 x,y是中心 z是zoomlevel
这不是一个很好的例子,因为中心的lng = -377,9 ..但是我的请求坐标范围在-90到90之间,而lng在-180到180之间仍然是我的计算失败我从数据库和中心点得到零数据我从地图api获得的数据不在我从同一个api获得的范围内

1 个答案:

答案 0 :(得分:-1)

当距离太远时,你可以加180°并使用绝对值:abs(-377.9 + 180)。