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

大致思路:

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()

结果

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

  1. 百度,google的地理编码

    1.百度的地理编码:(不支持中国以外的其它城市) http://api.map.baidu.com/geocoder/v2/?ak=E974997f80db18330f8f5c61d084a677&a ...

  2. Android百度地图开发02之添加覆盖物 + 地理编码和反地理编码

    下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码. 添加覆盖物 在地图上添加覆盖物,一般需要以下几个步骤: 1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物). 2. 构造Ov ...

  3. (转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)

    目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选      程序员8月书讯      项目管理+代码托管+文档协作,开发更流畅 百度地图工具类封装(包括定位,附近.城市.范围poi检索, ...

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

    百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示: http://api.map.baidu.com/geocoding/v3/?address=**省**市**区**路 ...

  5. 【Android】3.11 地理编码功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 地理编码指的是将地址信息建立空间坐标关系的过程,提供了地理坐标和地址之间相互转换的能力. 地理编码分 ...

  6. C#调用Geocoding API进行地理编码与逆编码

    使用C#调用Geocoding API来将地址转为经纬度,或者将经纬度转变为具体的地址. Geocoding API的详细介绍参见:http://developer.baidu.com/map/web ...

  7. 高德地图添加marker及反地理编码获取POI

    项目中集成百度.高德.腾讯地图已是司空见惯的事情,今天我总结了一下项目中用到的高德地图常用的功能: 1.展示高德地图并定位显示定位图标: 2.添加实时大头针: 3.反地理编码获取周围兴趣点 效果如下: ...

  8. 微信小程序地图之逆地理编码

    首先说一下,我微信自带map的api中并没有相关接口可调用.文中的方法建立于高德地图.(顺便吐槽,微信开发文档相比支付宝家的显得好烂!) 最近做项目用到地图定位相关的需求,为了搞定需求看了下相关的文档 ...

  9. iOS 原生地图地理编码与反地理编码

    当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 ...

随机推荐

  1. hdu 1286 找新朋友 (欧拉函数)

    找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. [HAOI2010]计数

    题面在这里 description 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数. 比如说给定{1,2},那么可以生成数字12,21,102,120,201,210 ...

  3. [学习笔记]Tarjan&&欧拉回路

    本篇并不适合初学者阅读. SCC: 1.Tarjan缩点:x回溯前,dfn[x]==low[x]则缩点. 注意: ①sta,in[]标记. ②缩点之后连边可能有重边. 2.应用: SCC应用范围还是很 ...

  4. Super Moban

    HAO BAN ZI 包括求解,判断无解,求自由变元个数以及标记不确定的变元.来源:http://blog.csdn.net/keshuqi/article/details/51921615 #inc ...

  5. 线程 condition_variable

    http://www.cnblogs.com/haippy/p/3252041.html 理解wait():当前线程调用 wait() 后将被阻塞(此时当前线程应该获得了锁(mutex).在线程被阻塞 ...

  6. Why is the ibdata1 file continuously growing in MySQL?

    We receive this question about the ibdata1 file in MySQL very often in Percona Support. The panic st ...

  7. 湖南大学第十四届ACM程序设计新生杯 E.Easy Problem

    E.Easy Problem Description: Zghh likes number, but he doesn't like writing problem description. So h ...

  8. xiaoluo同志Linux学习之CentOS6.4

    小罗同志写的不错,弄个列表过来啊   Linux学习之CentOS(三十六)--FTP服务原理及vsfptd的安装.配置 xiaoluo501395377 2013-06-09 01:04 阅读:56 ...

  9. Eclipse Jetty调试时无法保存js文件

    Jetty会使用内存映射文件来缓存静态文件,包括js,css文件. 在Windows下,使用内存映射文件会导致文件被锁定,所以当Jetty启动的时候无法在编辑器对js或者css文件进行编辑. 解决办法 ...

  10. C#中file类的应用

    现在就其中几个常用的进行介绍: Create:一般使用此重载方法,File.Create (String) ,String是一个路径名,表示文件的完整路径,返回值是一个FileStream实例: Co ...