位置搜索:特定地址与本地企业

时间:2012-04-10 14:15:47

标签: ios api search geolocation full-text-search

我正在为iOS构建一个位置应用。我目前有一个搜索栏,可用于搜索本地商家(例如披萨,加油站,银行)。搜索栏文本作为参数添加到URL并提供给Yahoo Local API。我想使用相同的搜索栏来查找特定地址,但这不是API的功能。我想我必须要么:

A)构建一些可以区分广泛的业务搜索和特定位置搜索的功能。将业务查询发送到API并将地址搜索发送到CLGeocoder。

B)寻找更多功能的API。

C)做一些我还没有考虑的事情。

我可以添加一个单独的搜索字段并将其用于地址搜索,但我想知道是否可以从同一个搜索栏进行搜索。如果有人可以提供任何建议或指出我正确的方向,我将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

你可能很难做A,因为地址和POI是相当自由的字符串,特别是当它们是人类生成的字符串时。我宁愿建议添加某种用户可以切换的开关,以便搜索商家或地址。

对于B,如果满足您的需求,您可能需要查看Google maps api。对于输入参数,这似乎非常通用。

答案 1 :(得分:0)

+1有趣的问题。这绝对是一个编程设计问题,但也几乎是一个UX问题。

我认为你可以在一个领域做到这一切。我为SmartyStreets工作,我们在那里解析和处理地址。以下是我从经验中学到的一些与您的问题有关的事情:

  • 不要使用正则表达式来解析或确定地址。它太复杂了。 Matej说,地址有许多不同的形式。 “Freeform strings”可以是任何东西。诱惑是使用正则表达式,但有一种更聪明的方式。
  • 极少数位置/地址API实际上提供了您正在寻找的价值和结果,至少根据他们的服务条款。例如,Google,Yahoo!和其他人需要显示地图,并且不允许自动查询(例如,没有用户主动发起请求)。
  • 大多数API仅执行地址近似,而不是地址验证。因此,你得到的结果充其量只是猜测。谷歌擅长猜测,但结果可能会回归,看起来合法,但事实并非如此。我已经看过很多了,这让我感到很痛苦。地理定位/地理编码API有它们的位置,但它们也有其局限性。

因此,举例说明:用户在该文本字段中键入POI或地址。你不确定它是哪一个或两者都是。如果您 知道,POI或地址是否存在?我不知道一个(廉价的)API同时执行两个 - 我见过的是企业级的API,但是......太多钱可能太多了。这是一个我会尝试的更简单的方法。

  1. 查找CASS认证服务以检查地址。 SmartyStreets的LiveAddress APIdifferent demo on homepage)就是这样一种服务(价格便宜,即使是小批量使用也是免费的)。虽然API不直接解析单行地址,但使用 this algorithm (使用a working example here)非常容易 - 在Objective C中它更容易因为你没有不得不像在Javascript中那样混淆JSONP。

  2. 如果LiveAddress或同等服务(我鼓励你做一些研究并告诉我你是否有其他问题 - 我很乐意提供帮助),返回任何结果,字符串是一个地址。一些CASS认证的服务,如果被警告,也将返回虚假地址或猜测,并且很难/不可能区分这两者。 LiveAddress只返回有效的地址。因此,如果LiveAddress返回结果(通常是第一个,使用上面的算法),字符串肯定是一个地址,或POI后跟一个地址。 (是的,LiveAddress会对每个地址进行地理编码。)

  3. 如果未返回任何结果,那么它就是POI /商家名称。如果你的应用程序遵守谷歌或雅虎的服务条款,请查询他们的API,因为他们擅长猜测并找到更多类似的东西。

  4. 甚至另一种选择是首先查询Maps API,然后使用它返回的地址(如果有的话),通过LiveAddress发送它以确保它存在并了解更多信息。

    希望指出你正确的方向(没有双关语意)。如果您想澄清任何事情或有任何其他与地址相关的问题,请与我们联系。