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