3

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

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

B) 找到更通用的 API。

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

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

4

2 回答 2

0

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

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

  • 不要使用正则表达式来解析或确定地址。它太复杂了。地址有许多不同的形式,就像 Matej 说的那样。“自由格式字符串”可以是任何东西。诱惑是使用正则表达式,但有一种更聪明的方法。
  • 很少有位置/地址 API 真正提供您正在寻找的价值和结果,至少根据它们的 TOS。例如,Google、Yahoo! 和其他要求显示地图并且不允许自动查询(例如,没有用户主动发起请求)。
  • 大多数 API 只执行地址近似,不执行地址验证。因此,您得到的结果充其量只是一个猜测。谷歌擅长猜测,但结果可能会返回看起来合法但实际上并非如此的结果。我已经看到了很多,它咬了我。地理定位/地理编码 API 有其一席之地,但它们也有其局限性。

因此,举个例子:用户在该文本字段中键入 POI 或地址。你不确定它是哪一个,或者两者兼而有之。如果您知道,POI 或地址是否存在?我不知道同时执行两者的(便宜的)API——我见过企业级的API,但是……可能太贵了。这是我会尝试的一种更简单的方法。

  1. 查找经 CASS 认证的服务以检查地址。SmartyStreets 的LiveAddress API主页上的不同演示)就是这样一种服务(价格便宜,甚至对低容量使用免费)。虽然 API 不直接解析单行地址,但使用这个算法真的很容易(这里有一个工作示例)——在 Objective C 中更容易,因为你不必像在 Javascript 中那样弄乱 JSONP .

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

  3. 如果未返回任何结果,则它是 POI/企业名称。如果您的应用程序遵循 Google 或 Yahoo 的 TOS,请查询他们的 API,因为他们擅长猜测并找到更通用的匹配项。

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

希望能为您指明正确的方向(没有双关语)。如果您想澄清任何事情或有任何其他与地址相关的问题,请告诉我。

于 2012-04-10T17:32:07.910 回答
0

您可能很难做 A,因为地址和 POI 是非常自由格式的字符串,尤其是当它们是人工生成的字符串时。我宁愿建议添加某种用户可以切换的开关,以便搜索企业或地址。

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

于 2012-04-10T15:12:48.160 回答