利用百度地图通过位置名称查询经纬度方法总结

这段时间公司做大数据统计,需要用到百度地图,并且需要将数据的点位(也就是数据对应的位置)通过经纬度来在地图上进行描点。但是不能单纯用一种方法进行描点,后台定时器也需要调用查看,下面我就简单介绍前后台两种调用百度接口的方法。
需要准备百度一个开发者key,如果没有可以去百度开发者中心申请key
百度开发者中心:http://developer.baidu.com

1 前端通过js调用百度接口方法获取数据

废话不多说,上我写的test代码


<html lang="en"> 

<head>
    <title>根据地址查询经纬度title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script src="http://api.map.baidu.com/api?v=2.0&ak=53oVIOgmSIejwV7EfphPgTynOZbIiVYu">script>
head>

<body style="background:#CBE1FF">
    <div style="width:1200px;margin:auto;">
        要查询的地址:
        <input id="text_" type="text" value="宁波天一广场" style="margin-right:100px;" /> 查询结果(经纬度):
        <input id="result_" type="text" />
        <input type="button" value="查询" onclick="searchByStationName();" />
        <div id="container" style="position: absolute;
                margin-top:30px; 
                top:0;
                bottom:0;
                left:0;
                right:0;
                border: 1px solid gray;
                overflow:hidden;">
        div>
    div>
body>
<script type="text/javascript">
var map = new BMap.Map("container");
map.centerAndZoom("宁波", 12);
map.enableScrollWheelZoom(); //启用滚轮放大缩小,默认禁用
map.enableContinuousZoom(); //启用地图惯性拖拽,默认禁用

map.addControl(new BMap.NavigationControl()); //添加默认缩放平移控件
map.addControl(new BMap.OverviewMapControl()); //添加默认缩略地图控件
map.addControl(new BMap.OverviewMapControl({
    isOpen: true,
    anchor: BMAP_ANCHOR_BOTTOM_RIGHT
})); //右下角,打开

var localSearch = new BMap.LocalSearch(map);
localSearch.enableAutoViewport(); //允许自动调节窗体大小
function searchByStationName() {
    map.clearOverlays(); //清空原来的标注
    var keyword = document.getElementById("text_").value;
    localSearch.setSearchCompleteCallback(function(searchResult) {
        var poi = searchResult.getPoi(0);
        document.getElementById("result_").value = poi.point.lng + "," + poi.point.lat;
        map.centerAndZoom(poi.point, 13);
        var marker = new BMap.Marker(new BMap.Point(poi.point.lng, poi.point.lat)); // 创建标注,为要查询的地方对应的经纬度
        map.addOverlay(marker);
        var content = document.getElementById("text_").value + "

经度:"
+ poi.point.lng + "
纬度:"
+ poi.point.lat; var infoWindow = new BMap.InfoWindow("

" + content + "

"
); marker.addEventListener("click", function() { this.openInfoWindow(infoWindow); }); // marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画 }); localSearch.search(keyword); }
script> html>

经过反复测试这种方法是可行的,上面的是我的测试key,大家可以采用这种方法前端调用百度查询地理位置经纬度的接口。

2 后端通过java代码调用百度接口方法获取数据

package mz.approve.shtt.utils;

import net.sf.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
 *
 * 获取位置经纬度方法
 * Created by LiXiaoTong on 2017/6/28.
 */
public class LngAndLatUtil {
    public static String getLngAndLat(String address){
        String map="";
        String url = "http://api.map.baidu.com/geocoder/v2/?address="+address+"&output=json&ak=xUHj6j8bLRwOPBXex2B3fnyd9YeHlnNs";
        try {
            String json = loadJSON(url);
            JSONObject obj = JSONObject.fromObject(json);

            if(obj.get("status").toString().equals("0")){
                double lng=obj.getJSONObject("result").getJSONObject("location").getDouble("lng");
                double lat=obj.getJSONObject("result").getJSONObject("location").getDouble("lat");
                map= getDecimal(lng)+","+getDecimal(lat);
                //System.out.println("经度:"+lng+"---纬度:"+lat);
            }else{
                System.out.println("未找到相匹配的经纬度!");
                //System.out.println("未找到相匹配的经纬度!");
            }
        }catch (Exception e){
            System.out.println("未找到相匹配的经纬度,请检查地址");
        }
        return map;
    }

    public static double getDecimal(double num) {
        if (Double.isNaN(num)) {
            return 0;
        }
        BigDecimal bd = new BigDecimal(num);
        num = bd.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue();
        return num;
    }

    public static String loadJSON (String url) {
        StringBuilder json = new StringBuilder();
        try {
            URL oracle = new URL(url);
            URLConnection yc = oracle.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    yc.getInputStream(),"UTF-8"));
            String inputLine = null;
            while ( (inputLine = in.readLine()) != null) {
                json.append(inputLine);
            }
            in.close();
        } catch (MalformedURLException e) {
        } catch (IOException e) {
        }
        return json.toString();
    }

}

将代码贴到java代码中就能成功调用百度地图位置查询接口,很简单,后期我会将我的代码整理成压缩文件方式上传到csdn上面,有需要可以下载。对于刚刚这两种方法获取经纬度方式如果有其他方法获取的小伙伴欢迎多多交流 如果代码有错误也欢迎指错。

你可能感兴趣的:(百度地图,接口调用)