根据经纬度获得城市

- (NSString *)getCityByGeocodingWithLatitude:(double)latitude longitude:(double)longitude

{

    NSString *urlStr = [NSString stringWithFormat:@"http://api.map.baidu.com/geocoder?output=json&location=%f,%f&key=%@",latitude,longitude,GEOCODING_KEY];

    NSURL *url = [NSURL URLWithString:urlStr];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    NSURLResponse *response = nil;

    NSError *error = nil;

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseerror:&error];

    SBJsonParser *jsonParser = [[SBJsonParser allocinit];

    NSDictionary *dataDict = [jsonParser objectWithData:data];

    NSLog(@"%@",dataDict);

    //city    district   street 街道  street_number 街道号

    //    NSString *tmpStr = [[[dataDict objectForKey:@"result"]objectForKey:@"addressComponent"]objectForKey:@"city"];

    NSString *tmpStr = [[[dataDictobjectForKey:@"result"]objectForKey:@"addressComponent"]objectForKey:@"city"];//

    [jsonParser release];

    return tmpStr;

}

### Java 根据经纬度获取城市名称的实现方法 在Java中,可以通过调用HTTP请求来访问在线地理编码服务接口以根据给定的经纬度坐标获得对应的城市名称或其他详细的地理位置信息。下面提供一种基于HttpClient工具类发送GET请求至特定的地图API从而得到位置描述的方法[^1]。 对于具体的代码实例,在`main`函数内部定义了一组测试用的纬度和经度数值,并利用自定义静态方法`findByLatAndLng()`来进行网络查询操作: ```java public class LocationFinder { public static void main(String[] args) throws Exception{ // 测试数据:纬度, 经度. String address = HttpClientUtils.findByLatAndLng("51.132573", "124.802554"); System.out.println("地址是: " + address); } } ``` 这里假设存在名为`HttpClientUtils`的帮助类用于处理实际的HTTP通信逻辑以及解析返回的数据结构。为了构建完整的解决方案,则需要进一步补充该辅助类的具体功能实现部分。通常情况下会涉及到URL拼接、建立连接、读取响应流并最终转换成易于理解的文字表述形式等内容。 另外还有一种方式不依赖第三方库而直接使用标准库完成相同任务的例子如下所示[^2]: ```java import java.net.*; import java.io.*; // ...其他必要的导入语句... public class SimpleLocationFinder { private final static String mapUriStr = "http://api.map.baidu.com/reverse_geocoding/v3/?ak={your_api_key}&output=json&coordtype=wgs84ll&location={0},{1}"; public static String findCityByLatLon(double latitude,double longitude)throws IOException{ URL url = new URL(MessageFormat.format(mapUriStr, Double.toString(latitude),Double.toString(longitude))); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); InputStream is=conn.getInputStream(); ByteArrayOutputStream result = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) != -1){ result.write(buffer, 0, length); } JSONObject jsonObject=new JSONObject(result.toString()); return parseAddressFromJson(jsonObject).toString(); } private static StringBuilder parseAddressFromJson(JSONObject json){ // 解析json对象中的addressComponent字段下的city值作为城市名 JSONObject addressComponent=json.getJSONObject("result").getJSONObject("addressComponent"); return new StringBuilder(addressComponent.getString("city")); } public static void main(String[]args[])throws Exception{ double lat=51.132573d,longt=124.802554d; System.out.println(findCityByLatLon(lat,longt)); } } ``` 上述示例采用了百度地图开放平台提供的逆向地理编解码API接口进行演示说明;需要注意的是此段代码片段里包含了未被初始化的关键参数——即开发者密钥(`{your_api_key}`),这要求使用者前往相应服务商处注册账号申请个人专属key之后再替换掉占位符才能正常使用。 最后介绍一个更贴近企业级应用开发场景的做法,它引入了一些额外的技术组件比如阿里巴巴FastJSON序列化框架以便于更好地管理和操纵复杂的JSON格式文档。同时考虑到安全性等因素的影响,建议采用HTTPS协议代替普通的HTTP版本以保障传输过程的安全可靠程度。以下是简化版的核心业务流程示意代码[^3]: ```java import com.alibaba.fastjson.JSON; //...其余所需包声明... public class AdvancedLocationService { private static final String GEOCODE_API_URL="https://apis.map.qq.com/ws/geocoder/v1/"; /** * @param lat 纬度 * @param lng 经度 */ public static String getCityName(Double lat, Double lng) { try { URL obj = new URL(GEOCODE_API_URL+"?location="+lat+","+lng+"&key={Your_Tencent_Map_Key}"); HttpURLConnection con = (HttpURLConnection)obj.openConnection(); BufferedReader in =new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer responseContent = new StringBuffer(); while((inputLine=in.readLine())!=null){ responseContent.append(inputLine); } Map<String,Object> resultMap= JSON.parseObject(responseContent.toString(),Map.class); if ("0".equals(resultMap.get("status")) && null!=(resultMap=getResultDetail(resultMap))){ Object city=resultMap.getOrDefault("city","未知地区"); return city==null?"":city.toString(); }else{ throw new RuntimeException("Failed to fetch location data."); } } catch (Exception e) { e.printStackTrace(); return ""; } } private static Map getResultDetail(Map<String,Object> originData){ List<Map<String,Object>> pois=(List<Map<String,Object>>)originData.get("result"); if(pois.isEmpty()){ return Collections.emptyMap(); }else{ return pois.iterator().next(); } } } ``` 这段程序展示了如何借助腾讯地图Web Services API执行相似的任务。同样地,记得事先准备好合法有效的API Key并将之填入指定位置后方可运行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值