2012-07-10 98 views
0

我正在尝试实施Google地图。 第一部分是将地图集中到一个特定的地址,这非常好。根据搜索结果放置Google地图标记

我的下一个问题是,我必须在商店名称上进行搜索,在地图上放置商店的标记。标记应该可能连接到搜索结果,以便在点击时显示信息气泡。如何解决这个问题,我完全没有答案。

google map with result

回答

1

你的脚步似乎确定以我来说,我认为对于店名搜索进入到你的服务器,并返回一些结果和商店名称和地址,然后你看,最多使用谷歌地理编码API并获取纬度/经度坐标,并把标记在地图上,这里是我可能会使用的步骤:

  • 在一个特定的地址创建一个映射
  • 中心
  • 搜索商店
  • 如果结果具有与其关联的地理编码,那么只需使用它来放置标记。
  • 如果结果没有纬度/经度,然后向谷歌地理编码API请求获取纬度/经度坐标。之后放置标记,将接收到的地理编码存储到数据库中(通过使用一些背景Ajax请求)。

Google Geocoding API best practices建议您应该存储地理编码,以便您不必每次都查询Google的服务器。为此,您需要修改后端,以便将Geocode与商店详细信息一起存储,并且在搜索结果中可以返回地理编码(如果可用)。

在旁注中,您可以使用GMaps JavaScript库来简化地图操作。

更新

上述解决方案完全在你的修订方案。让我再改一下流程:

  1. 后端将返回店铺列表时,由商店名称搜索(这应该是很容易我猜)
  2. 如果结果不是空的,则通过列表循环和看看他们是否都有一个纬度/经度值相关。
  3. 如果您没有找到记录的纬度/经度值,则向Google服务器发送一个Geocode请求,传递该商店的地址(您至少需要商店的地址,否则您无法获取纬度/ lng来自Google的价值)作为参数。如果记录具有纬度/经度值,那么只需继续并在地图上放置一个标记。
  4. 一旦您收到来自Geocode API的响应,然后继续并使用提供的地图库API在地图上放置一个标记。对于GMaps,它是map.addMarker({...})
  5. 一旦所有的请求都完成了,那么你可以考虑优化一下前面建议的位置,在这里你可以将接收到的地理编码存储在你自己的服务器中,这样你就不必一次又一次地获取它们。

要实现上述步骤,您需要熟悉Maps JS库以及JavaScript和Ajax/JSONP。请记住,所有您的Geocode请求(我认为JSONP)都是异步的,只有当响应可用时(通常在回调中),您才应该调用标记放置代码。 GMaps库示例非常简单易用。我希望这个解释应该足以解决你的问题,如果它能帮助你,那么你可以考虑标记这个答案。

+0

您澄清了我以为我想做的事情,现在我修改了我的问题。还有什么想法? – Xavio 2012-07-12 07:52:23

+0

@Xavio我已经更新了我的答案。 – Arnab 2012-07-13 09:23:56