我正在尝试从地图中反向查找位置。比如说,我的数据库中有不同的位置及其坐标和详细信息。
现在,每当我放大/缩小或拖动地图(在 Mapquest 中)时,所有条目都应显示在带有地图可见区域的下拉列表中。它应该根据地图缩放级别和位置更新列表。
有没有办法做到这一点。我对谷歌地图也很好。
这是我想要实现的链接。 http://oobgolf.com/courses/finder/
我正在尝试从地图中反向查找位置。比如说,我的数据库中有不同的位置及其坐标和详细信息。
现在,每当我放大/缩小或拖动地图(在 Mapquest 中)时,所有条目都应显示在带有地图可见区域的下拉列表中。它应该根据地图缩放级别和位置更新列表。
有没有办法做到这一点。我对谷歌地图也很好。
这是我想要实现的链接。 http://oobgolf.com/courses/finder/
基本上......业务逻辑是这样的:
您需要从地图对象中获取边界,然后通过 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 的代码可能会有所不同 - 但逻辑应该完全相同。
此逻辑也适用于 MapQuest API。您需要将地图的当前范围传递到查询中,以便您可以根据地图的范围查询数据库。然后查询的结果将填充您的下拉菜单,因此当前显示在地图上的所有 POI 将在下拉菜单中具有相应的项目。
如果您使用 MapQuest JavaScript API,请查看MQA.TileMap.getBounds方法,该方法返回地图范围的当前边界框。我发现 MapQuest Developer Network 网站上的论坛在我遇到问题时非常有帮助,因此如果您需要帮助或需要进一步说明,请不要犹豫,在此处发布问题或代码示例。这是链接:http: //developer.mapquest.com/web/products/forums/