百度MapAPI之地理编码

地理编码:将具体地址数据转换为对应坐标点经纬度功能

大致思路:

1、从数据库取得具体地理位置

2、将地址作为参数访问API接口,获取返回数据

3、处理response数据并将经度(lng、longitude)、纬度(lat、latitude)存入数据库

API接口:http://api.map.baidu.com/geocoder/v2/?address=地址(&city=城市名)&output=json&ak=ak(密钥)

address:详细地址

city:可选参数,address所在城市名,起过滤作用

output:返回数据格式,json/xml

ak:访问百度API密钥,必须有,申请很容易。EsZB0Gz6IFXqj6OGBN951ROOOdzfEXXx

数据库表设计

语言选择:python(python处理数据和访问url都比java方便简单)

import pymysql
import requests
import json
import redef getLocation():
    #数据库连接
    conn = pymysql.Connect(host=‘localhost‘,
                           port=3306,
                           user=‘root‘,
                           passwd=‘root‘,
                           db=‘AnalyseBusiness‘,
                           charset=‘utf8‘)
    try:
        # 获取游标
        cur = conn.cursor()
        # 执行sql语句  选择经纬度为空的记录
        cur.execute(‘select * from BusinessInfo where longitude is null or latitude is null‘)
        # 取得select返回的记录
        data = cur.fetchall()
        for d in data:
            # url = "http://api.map.baidu.com/geocoder/v2/?address=天安门&city=北京&output=json&ak=EsZB0Gz6IFXqj6OGBN951ROOOdzfEXXx"
            # 将address和city加入构成访问url   get请求
            url = "http://api.map.baidu.com/geocoder/v2/?address=" + d[0] + "&city=" + d[
                1] + "&output=json&ak=EsZB0Gz6IFXqj6OGBN951ROOOdzfEXXx"
            response = requests.get(url)

            ## 正则表达式获取经纬度  若查询无相关结果  取值异常  if判断list是否为空  为空设置经纬度为999作为标识
            text = response.text
            pattern_lng = "lng\":(.*?),"
            pattern_lat = "lat\":(.*?)}"
            lng = re.findall(pattern_lng, text)
            lat = re.findall(pattern_lat, text)
            if lng or lat:
                data = (lng[0], lat[0])
            else:
                # 纬度:从赤道向北和向南,各分90°,北纬为正数,南纬为负数
                # 经度:向东到180°或向西到180°
                # 若查询不到  存入非法经纬度值 作为标识
                data = ("999", "999")
            sql = "update BusinessInfo set longitude=‘%s‘, latitude=‘%s‘ WHERE address=‘" + d[0] + "‘"
            cur = conn.cursor()
            cur.execute(sql % data)
            conn.commit()
        cur.close()
        conn.close()
    except Exception:
        conn.rollback()
        conn.close()
        print("定位失败")
if __name__ == ‘__main__‘:
    getLocation()

结果

提示:百度Map获取到的是百度经纬度坐标,如需要转换为国测局坐标(GCJ02)的坐标系,需调用地址转换API

API接口:http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=密钥 //GET请求

import requests
import re
import json

def addCity():
    try:
        print("百度坐标")
        url = "http://api.map.baidu.com/geocoder/v2/?address=大雁塔&city=陕西省西安市&output=json&ak=EsZB0Gz6IFXqj6OGBN951ROOOdzfEXXx"
        response = requests.get(url)
        text = response.text
        print(type(text))
        pattern_lng = "lng\":(.*?),"
        pattern_lat = "lat\":(.*?)}"
        lng = re.findall(pattern_lng, text)
        lat = re.findall(pattern_lat, text)
        print("lng:" + lng[0])
        print("lat:" + lat[0])
        print("国测局(GCJ02)坐标")
        url1 = "http://api.map.baidu.com/geoconv/v1/?coords=" + lng[0] + "," + lat[
            0] + "&from=3&to=5&ak=EsZB0Gz6IFXqj6OGBN951ROOOdzfEXXx"
        text2 = requests.get(url1).text
        pattern_x = "x\":(.*?),"
        pattern_y = "y\":(.*?)}"
        x = re.findall(pattern_x, text2)
        y = re.findall(pattern_y, text2)
        print("x:" + x[0])
        print("y:" + y[0])
    except Exception:
        print("error")

if __name__ == ‘__main__‘:
    addCity()

结果

原文地址:https://www.cnblogs.com/GG-Bond/p/10500024.html

时间: 2024-10-20 21:08:09

百度MapAPI之地理编码的相关文章

ios百度地图逆地理编码(基于2.3.0--2.4.0SDK开发)

不得不说,现在的百度LBS部门是不是没人了啊,时不时的搞出来一些不好用得东西 要做百度的逆地理编码功能,肯定是要先启动百度服务了,这些就不再扯了.  BMKGeoCodeSearch *_geoCodeSearch = [[BMKGeoCodeSearch alloc]init];  _geoCodeSearch.delegate = self; BMKReverseGeoCodeOption *reverseGeoCodeOption= [[BMKReverseGeoCodeOption al

百度地图开发(二)之添加覆盖物 + 地理编码和反地理编码

之前写过一篇关于百度地图开发的blog,主要介绍了百度地图的基本地图的显示. 详见:Android百度地图开发(一)之初体验 下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码. 添加覆盖物 在地图上添加覆盖物,一般需要以下几个步骤: 1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物). 2. 构造OverlayOptions(地图覆盖物选型基类). 3. 在地图上添加覆盖物. 4. 添加相应的监听事件. 在API中可以看到,BaiDuMap类中有一个方法: 这个方法就是用

在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据

百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示: http://api.map.baidu.com/geocoding/v3/?address=**省**市**区**路**号院**社区&output=json&ak=您的AK密钥 返回结果实例: { "status":0, "result": { "location":{"lng":116.79, "lat":

Android 逆地理编码geocoding

地理编码和逆地理编码都差不多,这里总结一下逆地理编码,根据经纬度解析出地址.Android这边逆地理编码方式主要是两种(不包含高德,百度)一种是使用Android 系统的Geocoder类来解析(这种方法过时而且不实用,经常失败,在中国和印尼都有测试数据,而且部分手机阉割了,这种方法如果想要了解请参考http://dev.10086.cn/news/technologyproduct/4859.html):另外一种是使用Google 的web api; 请开VPN点击体验:http://maps

百度地图反地理

1.地理编码指的是将地址位置(中文地址)转换成经纬度,反地址编码指的是将经纬度转换成地址位置: 2.在百度地图中需要用到三个关键性的类:BMKGeoCodeSearch.BMKGeoCodeSearchOption.BMKReverseGeoCodeOption: 3.BMKGeoCodeSearch:地理编码主类,用来查询.返回结果信息(地址位置或经纬度): 4.BMKGeoCodeSearchOption:地理编码选项,即地理编码的数据模型,地址是通过该类传递进去的: 5.BMKRevers

基于矢量数据的逆地理编码功能实现

地理编码和逆地理编码概述 地理编码,是指将大家熟悉的地址文字描述,转换为经纬度,如输入某某省.某某市.某某路,在地图上根据经纬度定位到输入的地图上的某个点,直观的显示所在位置.逆地理编码是指将经纬度转化为大家都能看懂文字描述.一般人对经纬度数字没什么概念,转化为文字描述后,更容易让人理解.在现在大量的人员定位,车辆监控中,除了在地图上直观的展示人员或者车辆的地图位置外,很多的系统也提供了人员或者车辆所在位置的文字描述功能. 目前大部分系统和项目开发中,逆地理编码功能的实现,都是调用主流厂商提供的

(七十七)地理编码与反地理编码

所谓地理编码,指的是通过地名获取位置信息,例如经纬度.详细地址等. 所谓反地理编码,指的是通过经纬度.海拔等信息获取地理位置信息. 在iOS上使用地理编码和反地理编码,如果是手动输入经纬度,是不需要获取用户授权的,但是一般是获取用户的经纬度,然后再通过地理编码实现精确定位,因此需要授权,本文因为是单独讲解地理编码的相关知识,因此采用手动输人经纬度,不再赘述授权的代码. ①导入框架: #import <CoreLocation/CoreLocation.h> ②新建CLGeocoder对象: @

arcgis server10.2.2之地理编码服务发布

1.地理编码工具(Geocoding Tools)locator制作     打开arcCatalog,找到工具箱ArcToolbox中的Geocoding Tools---Create Address Locator,界面如下: 2.locator已经制作完成,接下来就是发布地理编码服务 右键locator工具,选择Share as---Geocode Service,界面如下: 3.到这里,地理编码服务已经结束,最后是测试一下发布的服务是否成功 打开url:http://localhost:

iOS开发拓展篇—CoreLocation地理编码

iOS开发拓展篇—CoreLocation地理编码 一.简单说明 CLGeocoder:地理编码器,其中Geo是地理的英文单词Geography的简写. 1.使用CLGeocoder可以完成“地理编码”和“反地理编码” 地理编码:根据给定的地名,获得具体的位置信息(比如经纬度.地址的全称等) 反地理编码:根据给定的经纬度,获得具体的位置信息 (1)地理编码方法 - (void)geocodeAddressString:(NSString *)addressString completionHan