0

我正在尝试从地图中反向查找位置。比如说,我的数据库中有不同的位置及其坐标和详细信息。

现在,每当我放大/缩小或拖动地图(在 Mapquest 中)时,所有条目都应显示在带有地图可见区域的下拉列表中。它应该根据地图缩放级别和位置更新列表。

有没有办法做到这一点。我对谷歌地图也很好。

这是我想要实现的链接。 http://oobgolf.com/courses/finder/

4

2 回答 2

1

基本上......业务逻辑是这样的:

您需要从地图对象中获取边界,然后通过 AJAX 将这些作为参数传递给获取记录的 SQL 查询,例如 minLat/maxLat & minLng/maxLng ...这些进入 WHERE 条件。这将从您的地理数据中“切出一个矩形”。您可以将这些值调整 5-10% - 这样非常接近边界的点将不会被绘制到地图上(这只是一个装饰性修复)。

刚刚在我的驱动器上找到了一些用于 Google Maps API 的示例 JS 代码(它使用 jQuery):

function loadViewport() {
    var b = map.getBounds();
    $.minY = b.getNorthEast().lng();
    $.maxY = b.getSouthWest().lng();
    $.minX = b.getSouthWest().lat();
    $.maxX = b.getNorthEast().lat();
    $.url = "http://www.somehost.com/data.php?mode=viewport&minX="+$.minX+"&maxX="+$.maxX+"&minY="+$.minY+"&maxY="+$.maxY;
    $.ajax({type:"GET",url:$.url,dataType:"json",success: parseJSON});
}

填充到左侧列表将需要通过函数 parseJSON() ...

SQL 的 WHERE 条件是这样的:

    WHERE
        (`location`.`latitude` BETWEEN ".(float)$minX." AND ".(float)$maxX.") 
    AND
        (`location`.`longitude` BETWEEN ".(float)$maxY." AND ".(float)$minY.")

当然,表中的列必须是数据类型浮点数 - 否则这肯定行不通。

如您所见,我正在从字符串转换为浮点数 - 为了启用比较...

希望这会有所帮助,MapQuest 的代码可能会有所不同 - 但逻辑应该完全相同。

资源

于 2011-12-16T03:32:07.157 回答
0

此逻辑也适用于 MapQuest API。您需要将地图的当前范围传递到查询中,以便您可以根据地图的范围查询数据库。然后查询的结果将填充您的下拉菜单,因此当前显示在地图上的所有 POI 将在下拉菜单中具有相应的项目。

如果您使用 MapQuest JavaScript API,请查看MQA.TileMap.getBounds方法,该方法返回地图范围的当前边界框。我发现 MapQuest Developer Network 网站上的论坛在我遇到问题时非常有帮助,因此如果您需要帮助或需要进一步说明,请不要犹豫,在此处发布问题或代码示例。这是链接:http: //developer.mapquest.com/web/products/forums/

于 2011-12-20T16:16:17.610 回答