通过边界框加载地图标记,但它们在视口以东溢出

时间:2015-11-30 13:20:16

标签: javascript php mysql google-maps google-maps-api-3

我正在将地图标记加载到Google Maps API(v3),方法是检查它们是否在map.getBounds()中,然后使用该数据过滤SQL查询。它的工作效果很好,除了标记加载之外似乎只受到视口的北边和南边的限制 - 当我向左或向右平移时,仍有标记填充到我的初始的东和西视口位置。

First Viewport Zoomed out view

如您所见,所有可能的标记都沿着东/西加载,即使它们不在原始边界框中。

PHP / MySQL的:

function get_addresses_from_bounds($swLat = null, $swLong = null, $neLat = null, $neLong = null) {
    if(!$swLat || !$swLong || !$neLat || !$neLong) {
        return;
    }

    $q_where = [];

    $q = "SELECT `latitude`, `longitude` FROM `customer_cards` as `c` INNER JOIN `geo_location` as `g` ON `g`.`placename` = `c`.`delivery_postcode`";

    //Bounds
    $q_where[] = ":swLat < :neLat AND `latitude` BETWEEN :swLat AND :neLat) OR (:neLat < :swLat AND `latitude` BETWEEN :neLat AND :swLat";
    $q_where[] = ":swLong < :neLong AND `longitude` BETWEEN :swLong AND :neLong) OR (:neLong < :swLong AND `longitude` BETWEEN :neLong AND :swLong";

    if(!empty($q_where)) {
        $q .= ' WHERE ( ' . implode(' ) && ( ', $q_where) . ')';
    }

    $stmt = $pdo->prepare($q);

    // Assign variables
    $stmt->bindParam(':swLat', $swLat, PDO::PARAM_STR);
    $stmt->bindParam(':swLong', $swLong, PDO::PARAM_STR);
    $stmt->bindParam(':neLat', $neLat, PDO::PARAM_STR);
    $stmt->bindParam(':neLong', $neLong, PDO::PARAM_STR);

    $stmt->execute();
    $members = $stmt->fetchAll();

    for ($i = 0; $i <= count($members); $i++) {
        unset($members[$i][0]);
        unset($members[$i][1]);
    }

    return $members;
}

更新:通过使用更简单的WHERE来选择边界,它已部分修复了我的问题。它现在只能向东方,屏幕以西的界限很好。

WHERE `latitude` > :swLat AND `latitude` < :neLat AND `longitude` > :swLong AND `longitude` < :neLong

更新2 :我使用上面的查询,不知道是怎么回事,因为它是在漫长的一天抨击之后。所以我没有添加这个作为答案

0 个答案:

没有答案