2

我要反转某个位置的地理代码纬度和经度,并想要获取该位置的地址。我已经通过谷歌网络服务完成了,但这需要时间。我想知道是否有其他一些好的和有效的方法。

当前调用此服务,

NSString * getAddress = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?latlng=%@,%@&sensor=true",Lattitude,Longitude];
4

6 回答 6

10

您可以使用CLGeocoder

[self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error){
    CLPlacemark *placemark = placemarks[0];
    NSLog(@"Found %@", placemark.name);
}];

但这仍然需要时间,因为这两种方法都使用 Web 服务将 lat / long 转换为一个地方

于 2013-07-31T07:15:04.270 回答
5

试试这个代码。

geoCoder = [[CLGeocoder alloc]init];
    [self.geoCoder reverseGeocodeLocation: locationManager.location completionHandler:

     //Getting Human readable Address from Lat long,,,

     ^(NSArray *placemarks, NSError *error) {
         //Get nearby address
         CLPlacemark *placemark = [placemarks objectAtIndex:0];
            //String to hold address
         NSString *locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "];
            //Print the location to console
         NSLog(@"I am currently at %@",locatedAt);
     }];
于 2013-07-31T07:18:16.743 回答
2

看看GLGeocoder。具体来说reverseGeocodeLocation:completionHandler:

于 2013-07-31T07:14:11.783 回答
2

您可以使用 Apple 的CLGeocoder(CoreLocation 的一部分)。具体来说,该– reverseGeocodeLocation:completionHandler:方法将返回给定坐标的地址数据字典。

于 2013-07-31T07:14:44.383 回答
1

看看这个教程,或者,如果只是想快速复制一些东西: NSArray *addressOutput; CLLocation *当前位置;//假设这些实例变量

// Reverse Geocoding
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
    NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
    if (error == nil && [placemarks count] > 0) {
        NSMutableArray *tempArray = [[NSMutableArray alloc] initWithCapacity:[placemarks count]];
        for (CLPlacemark *placemark in placemarks) {
            [tempArray addObject:[NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@",
                                  placemark.subThoroughfare, placemark.thoroughfare,
                                  placemark.postalCode, placemark.locality,
                                  placemark.administrativeArea,
                                  placemark.country]];
        }
        addressOutput = [tempArray copy];
    }
    else {
        addressOutput = nil;
        NSLog(@"%@", error.debugDescription);
    }
}];

基于教程中的代码。

于 2013-07-31T07:41:14.687 回答
0

如果您不想使用 google API,请尝试此代码 - 基本上将纬度和经度输入转换为 ZIP(可以调整为地址)。

pip install uszipcode

# Import packages
from uszipcode import SearchEngine
search = SearchEngine(simple_zipcode=True)
from uszipcode import Zipcode
import numpy as np

#define zipcode search function
def get_zipcode(lat, lon):
    result = search.by_coordinates(lat = lat, lng = lon, returns = 1)
    return result[0].zipcode

#load columns from dataframe
lat = df_shooting['Latitude']
lon = df_shooting['Longitude']

#define latitude/longitude for function
df = pd.DataFrame({'lat':lat, 'lon':lon})

#add new column with generated zip-code
df['zipcode'] = df.apply(lambda x: get_zipcode(x.lat,x.lon), axis=1)

#print result
print(df)

#(optional) save as csv
#df.to_csv(r'zip_codes.csv')
于 2020-02-24T18:47:20.343 回答