【问题标题】:Strategy to perform many Geocode requests执行许多地理编码请求的策略
【发布时间】:2016-08-05 18:33:11
【问题描述】:

我有一个应用程序需要将许多地址转换为 CLPlacemark 以获取纬度/经度。 在 Apple 文档中解释说我们不应该执行很多 GeoCode 请求,Geocoding 请求是有速率限制的。

在我的应用程序中,要执行地理编码,我只需请求一个地址,当我得到答案时,我会请求下一个地址,直到我收到所有地址的纬度/经度。

我会将这段代码放在一个专用线程中,以免阻塞用户。这似乎有效,但这是一个好策略吗?我如何确定 Apple 不会将我的应用程序列入黑名单或对我的请求返回错误。

   geoCodingFor(myAddress, index: 0) 

private func geoCodingFor(contacts:[String], index:Int) {
    if index < contacts.count {
        let address = contacts[index]
        CLGeocoder().geocodeAddressString(address) { placemarks, error in
            if let theError = error  {
                print("\(#function) geocode has failed for address \(address) with error \(theError .localizedDescription)")
            } else {
                if let thePlacemark = placemarks {
                    if thePlacemark.count > 0 {
                        print("=> Found placemark for address \(address)")
                    } else {
                        print("No placemark for address \(address)")
                    }
                } else {
                    print("\(#function) Warning geocode has no results for address \(address)")
                }
            }
            if index < contacts.count {
                self.geoCodingFor(contacts, index: index + 1)
            }
        }
    } else {
        print("\(#function) ================> Geocoding is completed")
    }
}

【问题讨论】:

    标签: ios swift geocoding


    【解决方案1】:

    简短:也许在每个地理编码请求之前尝试sleep(2)。

    Long:虽然无法确定 Apple 是否会将其应用程序“列入黑名单”。我不确定是否存在用于地理编码的“黑名单”应用程序。

    我自己也尝试过与您类似的策略。仅使用外部变量queue 并执行queue.popLast()。这样做给了我 100 个结果,然后我开始收到其余地址的错误。

    我在每个地理编码请求之前添加了一个sleep(2),并且我成功地提取了 4000 多个地理编码而没有阻塞。

    缺点是 - 需要更多时间。根据您计划对多少地址进行地理编码,这可能很有用。

    另外请注意,我从未尝试过sleep(1),这在某种程度上也可以工作。

    根据 Apple 的 docs 未指定“最大速率”,他们建议这样做

    您每分钟不应发送超过一个地理编码请求

    我希望这会有所帮助。

    干杯。

    【讨论】:

    • 感谢您的回答!根据您的经验,我将尝试序列化我的请求(就像我目前所做的那样),但如果出现错误,我将在请求失败的请求和后续请求之前添加一个 sleep()。我无法在每个请求之间添加睡眠,因为这对用户来说会花费太多时间。也许另一种选择是并行使用多个地理编码提供程序......我认为我需要的最大地理编码请求数少于 500。
    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2015-09-02
    相关资源
    最近更新 更多