Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 查找lat和long返回0,0_Objective C_Ios_Xcode_Google Maps_Geolocation - Fatal编程技术网

Objective c 查找lat和long返回0,0

Objective c 查找lat和long返回0,0,objective-c,ios,xcode,google-maps,geolocation,Objective C,Ios,Xcode,Google Maps,Geolocation,我正在使用谷歌获取一个地址来获取它的lat和long。我浏览了大约60-65个地址。但每次我都会随机得到5或6,返回0,0坐标对 每次失败的索引都是不同的,所以我确信这不是地址问题 下面是我用来返回lat和long的代码 我是否可能从for循环内部调用此方法?也许一遍又一遍这么快的叫唤会导致它有时会打嗝 -(CLLocationCoordinate2D)addressLocation:(NSString*)_address city:(NSString*)_city state:(NSStrin

我正在使用谷歌获取一个地址来获取它的lat和long。我浏览了大约60-65个地址。但每次我都会随机得到5或6,返回0,0坐标对

每次失败的索引都是不同的,所以我确信这不是地址问题

下面是我用来返回lat和long的代码

我是否可能从for循环内部调用此方法?也许一遍又一遍这么快的叫唤会导致它有时会打嗝

-(CLLocationCoordinate2D)addressLocation:(NSString*)_address city:(NSString*)_city state:(NSString*)_state {
    NSString *temp = [NSString stringWithFormat:@"%@, %@, %@", _address, _city, _state];
    NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", [temp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    NSError* error = nil;
    NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString ] encoding:NSASCIIStringEncoding error:&error];

    NSArray *listItems = [locationString componentsSeparatedByString:@","];
    double latitude = 0.0;
    double longitude = 0.0;

    if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) {
        latitude = [[listItems objectAtIndex:2] doubleValue];
        longitude = [[listItems objectAtIndex:3] doubleValue];
    }
    else {
        NSLog(@"Error: %@", [error description]);;
    }

    CLLocationCoordinate2D location;
    location.latitude = latitude;
    location.longitude = longitude;

    return location;
}

编辑

如果其他人对此有问题,我已经找到了一个解决办法

我浏览了一下我的列表,找到了每个地址的lat和long

如果Google查询返回错误,我会将该地址添加到保留数组中。这意味着我通过了Firoze提到的利率限制

在完成初始运行之后,我将遍历保持数组并找到每个地址的位置

我相信有一个更干净的实现这一点,但对于任何人谁不能获得营业执照,这是一个黑客的方式

我希望这有帮助,
Cory

您应该检查locationString是否为零。如果是这样,请查看错误。我猜你的电话是有费率限制的


你可能应该看看谷歌关于这项服务的服务条款。

我相信他们的费率是有限制的,这有什么关系吗?我有一个地址列表,我需要确定哪一个离我最近。我看不到任何其他方法可以找到它们的位置坐标来确定距离。这取决于应用程序的功能。这更多的是商业问题,而不是技术问题。我相信Google可以帮助您确定您的特定用例需要什么许可证/协议。查看这里的论坛:我看了一下,但恐怕17000美元的营业执照超出了预算。你对Firoze的其他服务有什么建议吗?嗯,你假设你甚至需要营业执照。并不是所有的应用程序都能做到,但这些人真的很有帮助,可以帮助你解决这个问题。他们比这里的任何人都更了解他们的所有条款和条件。我们使用谷歌,所以我不能评论其他服务。也许这里的其他人可以。不过,您现在并不是在问编程问题。谢谢您的帮助,我正在等待他们的答复。希望我们能解决一些问题。谷歌对如何使用这项服务有严格的限制,并不断更新算法,以检测滥用情况,并暂时(或永久)阻止访问。你可以试着让你的系统慢下来,但是明天可能会停止工作。也许您使用该服务并非出于预期目的,您应该找到其他地址查找服务。建议如何更改?可能检测到您的速率受限,然后等待几秒钟,然后继续执行查找。或者,如果你指的是一项建议的替代服务,那么“谷歌商业地图API”服务可能非常适合你。或者你可以将openstreetmap.org数据库下载到你自己的服务器上,并执行你自己的地理编码。你会推荐雅虎地图服务吗?我觉得谷歌更稳定一些。我认为雅虎和免费的谷歌地图服务都不可靠。他们是大财源(地图数据非常昂贵)。两家公司都可以(并且经常这样做)更改或删除免费服务的功能。如果你想要可靠,你真的需要为数据付费,或者使用openstreetmap.org。