通过地址获得经纬度

1.什么是Geocoding?

Geocoding API 是一类简单的HTTP接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以使用C# 、C++、Java等开发语言发送HTTP请求且接收JSON、XML的返回数据。

2.功能介绍

Geocoding API包括地址解析和逆地址解析功能。

  • 地理编码:即地址解析,由详细到街道的结构化地址得到百度经纬度信息,且支持名胜古迹、标志性建筑名称直接解析返回百度经纬度。例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.31985,lat:39.959836”,“百度大厦”地址解析的结果是“lng:116.30815,lat:40.056885”
  • 逆地理编码,即逆地址解析,由百度经纬度信息得到结构化地址信息。例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。
3.如何使用

百度地图Geocoding API是一套免费对外开放的API,无使用次数限制。使用方法:

第一步:申请ak(即获取密钥),若无百度账号则首先需要注册百度账号

第二步,拼写发送http请求的url,注意需使用第一步申请的ak。

第三步,接收http请求返回的数据(支持json和xml格式)。

以下是一个关于地理编码的简单示例。发送一个地址是“百度大厦”的请求,返回该地址对应的地理坐标。发送请求的url如下:

http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=E4805d16520de693a3fe707cdc962045&callback=showLocation
4.java调用测试

 1 package addressToGeoTest;
 2
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.FileOutputStream;
 8 import java.io.IOException;
 9 import java.io.InputStreamReader;
10 import java.io.OutputStreamWriter;
11 import java.net.URL;
12 import java.net.URLEncoder;
13 import java.util.*;
14
15 public class GetLatAndLngByBaidu {
16
17  public static void main(String args[]){
18
19      String cnAddress="北京市海淀区上地十街10号";
20      Map<String,String> map = GetLatAndLngByBaidu.getLatitude(cnAddress);
21         if(null != map){
22             System.out.println(cnAddress+"    经度:"+map.get("lng")+"    纬度:"+map.get("lat"));
23         }
24  }
25  /**
26   * 返回输入地址的经纬度坐标
27   * lng(经度),lat(纬度)
28   */
29  //1,申请ak(即获取密钥),若无百度账号则首先需要注册百度账号。
30  public static final String AK= "VGqyTtpnqfNxkTkPBG5APrGO";
31  public static Map<String,String> getLatitude(String address){
32       try {
33        address = URLEncoder.encode(address, "UTF-8");          //将地址转换成utf-8的16进制
34           //2, 拼写发送http请求的url,注意需使用第一步申请的ak。
35           //3, 接收http请求返回的数据(支持json和xml格式)本次采用json形式
36        URL resjson = new URL("http://api.map.baidu.com/geocoder/v2/?address="
37                           + address +"&output=json&ak="+ AK);
38        BufferedReader in = new BufferedReader(
39                           new InputStreamReader(resjson.openStream()));
40        String res;
41        StringBuilder sb = new StringBuilder("");
42        while((res = in.readLine())!=null){
43         sb.append(res.trim());
44        }
45        in.close();
46        String str = sb.toString();
47        //System.out.println("return json:"+str);
48        Map<String,String> map = null;
49        if(str!=null){
50         int lngStart = str.indexOf("lng\":");
51         int lngEnd = str.indexOf(",\"lat");
52         int latEnd = str.indexOf("},\"precise");
53         if(lngStart > 0 && lngEnd > 0 && latEnd > 0){
54          String lng = str.substring(lngStart+5, lngEnd);
55          String lat = str.substring(lngEnd+7, latEnd);
56          map = new HashMap<String,String>();
57          map.put("lng", lng);
58          map.put("lat", lat);
59          return map;
60         }
61        }
62       }catch (Exception e) {
63        e.printStackTrace();
64       }
65       return null;
66      }
67 }

运行结果:

5.简单应用

期望实现功能:

input.txt存放中文地址
从input.txt中读取中文地址,获得经纬度
将中文地址以及经纬度输出到output.txt中

package addressToGeo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLEncoder;
import java.util.*;

public class GetLatAndLngByBaidu {

 public static void main(String args[]){

    long startTime=System.currentTimeMillis();
    String fileSourcePath="F://Essex//AddressToGeo//source//input.txt";
    String fileDestPath="F://Essex//AddressToGeo//source//output.txt";
    readAddressWriteGeo(fileSourcePath,fileDestPath);

 }
 /**
  * 返回输入地址的经纬度坐标
  * key lng(经度),lat(纬度)
  */
 //1,申请ak(即获取密钥),若无百度账号则首先需要注册百度账号。
 public static final String AK= "VGqyTtpnqfNxkTkPBG5APrGO";
 public static Map<String,String> getLatitude(String address){
      try {
       address = URLEncoder.encode(address, "UTF-8");          //将地址转换成utf-8的16进制
          //2, 拼写发送http请求的url,注意需使用第一步申请的ak。
          //3, 接收http请求返回的数据(支持json和xml格式)本次采用json形式
       URL resjson = new URL("http://api.map.baidu.com/geocoder/v2/?address="
                          + address +"&output=json&ak="+ AK);
       BufferedReader in = new BufferedReader(
                          new InputStreamReader(resjson.openStream()));
       String res;
       StringBuilder sb = new StringBuilder("");
       while((res = in.readLine())!=null){
        sb.append(res.trim());
       }
       in.close();
       String str = sb.toString();
       //System.out.println("return json:"+str);
       Map<String,String> map = null;
       if(str!=null){
        int lngStart = str.indexOf("lng\":");
        int lngEnd = str.indexOf(",\"lat");
        int latEnd = str.indexOf("},\"precise");
        if(lngStart > 0 && lngEnd > 0 && latEnd > 0){
         String lng = str.substring(lngStart+5, lngEnd);
         String lat = str.substring(lngEnd+7, latEnd);
         map = new HashMap<String,String>();
         map.put("lng", lng);
         map.put("lat", lat);
         return map;
        }
       }
      }catch (Exception e) {
       e.printStackTrace();
      }
      return null;
     }
 /*
  *void readAddressWriteGeo(String sourceFilePath,String destFilePath) 函数
  *功能:从sourceFilePath下读取中文地址,获取经纬度,存放在destFilePath中
  * */
 public static void readAddressWriteGeo(String sourceFilePath,String destFilePath)
 {
     long startTime=System.currentTimeMillis();
     try
     {
         System.out.println("读取中文地址...");
        String encoding="Unicode";
        File fileSource=new File(sourceFilePath);//获得输入句柄
        FileInputStream fis=new FileInputStream(fileSource);//创建字节流输入对象
        InputStreamReader inStream=new InputStreamReader(fis,encoding);//将字节流转换为字符流,编码格式为Unicode,创建字节流输入对象
        BufferedReader input=new BufferedReader(inStream);

        String outputFilePath=createFile(destFilePath);
        File fileDest=new File(outputFilePath);//获得输出文件句柄
        FileOutputStream fos=new FileOutputStream(destFilePath);//创建字节流输出对象
        OutputStreamWriter outStream=new OutputStreamWriter(fos,encoding);//将字节流转换为字符流,编码格式为Unicode,创建字节流输出对象
        BufferedWriter output=new BufferedWriter(outStream);

        String cnAddress=null;
        cnAddress=input.readLine();
        System.out.println("通过百度api获取经纬度...");
        int count=0;
        while(cnAddress!=null)
        {
            //System.out.println(cnAddress);
             Map<String,String> map = GetLatAndLngByBaidu.getLatitude(cnAddress);
                if(null != map){
                    //System.out.println("经度:"+map.get("lng"));
                   //System.out.println("纬度:"+map.get("lat"));
                   output.write(map.get("lng")+"    "+map.get("lat")+"    "+cnAddress+"\r\n");
                }
            cnAddress=input.readLine();
            count++;
        }
        input.close();
        output.close();

        System.out.println("获取:"+count+"条经纬度信息");
        long endTime=System.currentTimeMillis();
        System.out.println("花费时间: "+(endTime-startTime)/1000+"s");
        System.out.println("经纬度获取成功!");
     }
     catch(IOException e)
     {
         e.printStackTrace();
     }
 }
 //创建新的output.txt文档
 public static String createFile(String filePath)
 {
    File f=new File(filePath);//构造一个路径的句柄
    if(f.exists())//如果文件存在则删除,不存在则生成
    {
        f.delete();
    }
    else
    {
        try {
            f.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return f.getPath();
 }

}

运行测试结果:

6.参考

http://developer.baidu.com/map/webservice-geocoding.htm

http://www.cnblogs.com/gzggyy/archive/2013/06/21/3148610.html


通过地址获得经纬度,布布扣,bubuko.com

时间: 2024-08-05 04:44:43

通过地址获得经纬度的相关文章

高德地图api实现地址和经纬度的转换(python)

利用高德地图web服务api实现地理/逆地址编码 api使用具体方法请查看官方文档 文档网址:http://lbs.amap.com/api/webservice/guide/api/georegeo/ 1.利用python第三方库requests实现 Requests库文档地址:http://www.python-requests.org/en/master/ 1 #!/usr/bin/env python3 2 #-*- coding:utf-8 -*- 3 ''' 4 利用高德地图api实

Python通过百度地图API获取地址的经纬度

API 地址:http://developer.baidu.com/map/index.php?title=webapi/guide/webservice-geocoding 一个简单的API,可以通过地址(地名)获得经纬度,或者通过经纬度获取周边的位置信息. ak是百度开发者APIKEY,注册地址:http://developer.baidu.com/ #!/usr/bin/env python3 import requests import json def locatebyAddr(add

根据省份等地址获取经纬度,或根据经纬度获取地址信息

在web开发涉及地图操作的时候或者移动客户端开发中有时候有以下需求: 下面主要记录通过百度提供的API的一个解决方案: 在百度开发平台中提供了这样一个叫Geocoding 的API,这个API用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,使用的是http协议,返回JSON或者XML数据. 地理编码:即地址解析,由详细到街道的结构化地址得到百度经纬度信息,例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.31985,lat:39.959836”.同时,地理编码

ios输入地址得出经纬度

ios输入地址得出经纬度 CLGeocoder *myGeocoder = [[CLGeocoder alloc] init]; [myGeocoder geocodeAddressString:_searchBar.text completionHandler:^(NSArray *placemarks, NSError *error) { if ([placemarks count] > 0 && error == nil) { CLPlacemark *firstPlacema

Android中由IP地址查询经纬度坐标的实例

大家都知道,根据IP地址就可以知道它所在的具体位置,在Android中同样可以由IP地址得到它的位置,即具体的地理经纬度坐标. 本文就直接以代码的方式演示如何根据IP地址查询地理经纬度坐标位置,下面的例子中演示的就是由58.192.32.1这个IP地址查询到其所在的经纬度坐标为(118.777802,32.061699). Java代码 package eoe.demo; import com.mapdigit.gis.DigitalMap; import com.mapdigit.gis.Ma

百度地图通过地址得到经纬度

@model ApplySpecialShopEditViewModel<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scal

百度地图API简单应用——1.根据地址查询经纬度

这几天比较空闲,就接触了下百度地图的API(开发者中心链接地址:http://developer.baidu.com),发现调用还是挺方便的.只要简单几步注册下,就可以获得一个Key,就能直接调用(PS:好像1.3版本前的无需注册获取key,就能直接调用api). 想着能结合到自己的项目中去,那也挺不错的.看了园子中的几篇文章,感觉甚好,想自己也动手试试.在调用百度地图API的时候,经纬度的获取必然是关键,那么怎么样获取到经纬度的值呢?这是一个最首要解决的问题.通过查询资料,看了几个例子,得知了

百度地图API 根据地址查询经纬度

html页面.引用上API: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>根据地址查询经纬度</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascrip

利用百度API(js),怎样通过地址获取经纬度

根据经纬度找到具体地址:http://api.map.baidu.com/geocoder?location=纬度,经度&output=输出格式类型&key=用户密钥如:http://api.map.baidu.com/geocoder?location=31.407452,121.490523&output=json&key=6eea93095ae93db2c77be9ac910ff311 根据具体地址找到经纬度:http://api.map.baidu.com/geoc