百度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()
结果

百度MapAPI之地理编码的更多相关文章
- 百度,google的地理编码
1.百度的地理编码:(不支持中国以外的其它城市) http://api.map.baidu.com/geocoder/v2/?ak=E974997f80db18330f8f5c61d084a677&a ...
- Android百度地图开发02之添加覆盖物 + 地理编码和反地理编码
下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码. 添加覆盖物 在地图上添加覆盖物,一般需要以下几个步骤: 1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物). 2. 构造Ov ...
- (转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)
目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选 程序员8月书讯 项目管理+代码托管+文档协作,开发更流畅 百度地图工具类封装(包括定位,附近.城市.范围poi检索, ...
- 在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据
百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示: http://api.map.baidu.com/geocoding/v3/?address=**省**市**区**路 ...
- 【Android】3.11 地理编码功能
分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 地理编码指的是将地址信息建立空间坐标关系的过程,提供了地理坐标和地址之间相互转换的能力. 地理编码分 ...
- C#调用Geocoding API进行地理编码与逆编码
使用C#调用Geocoding API来将地址转为经纬度,或者将经纬度转变为具体的地址. Geocoding API的详细介绍参见:http://developer.baidu.com/map/web ...
- 高德地图添加marker及反地理编码获取POI
项目中集成百度.高德.腾讯地图已是司空见惯的事情,今天我总结了一下项目中用到的高德地图常用的功能: 1.展示高德地图并定位显示定位图标: 2.添加实时大头针: 3.反地理编码获取周围兴趣点 效果如下: ...
- 微信小程序地图之逆地理编码
首先说一下,我微信自带map的api中并没有相关接口可调用.文中的方法建立于高德地图.(顺便吐槽,微信开发文档相比支付宝家的显得好烂!) 最近做项目用到地图定位相关的需求,为了搞定需求看了下相关的文档 ...
- iOS 原生地图地理编码与反地理编码
当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 ...
随机推荐
- [CF632A]Grandma Laura and Apples
题目大意:有$n$个顾客买苹果,每个买一半的苹果,有时会送半个苹果.最后卖光了,问卖了多少钱 题解:倒退过来,可以把半个苹果当做一份来算,这样不会有小数 卡点:无 C++ Code: #include ...
- [洛谷P1951]收费站_NOI导刊2009提高(2)
题目大意:有一张$n$个点$m$条边的图,每个点有一个权值$w_i$,有边权,询问从$S$到$T$的路径中,边权和小于$s$,且$\max\limits_{路径经过k}\{w_i\}$最小,输出这个最 ...
- 正确答案 [Hash/枚举]
正确答案 题目描述 小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案. "吔,我的答案和你都不一样!",小Y说道,"我们去找神犇们问答案吧" ...
- Codeforces Round #510 (Div. 2) D. Petya and Array(树状数组)
D. Petya and Array 题目链接:https://codeforces.com/contest/1042/problem/D 题意: 给出n个数,问一共有多少个区间,满足区间和小于t. ...
- bzoj4589 FWT xor版本
4589: Hard Nim Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 865 Solved: 484[Submit][Status][Disc ...
- JS表单验证优化
var validate = (function(){ var messages = { isEmail : '输入正确格式邮箱', isPhoneNum : '输入正确手机号' }; var val ...
- LOJ tangjz的背包
题目大意 有 \(n\) 个物品, 第 \(i\) 个物品的体积为 \(i\) 令 \(f(x)\) 为 选择 \(m\) 个物品, 体积和为 \(x\) 的方案数 令 \(V = \sum_{i=1 ...
- L3-003. 社交集群(并查集)
L3-003. 社交集群 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 在社交网络平台注册时,用户通常会输入自己的兴趣爱好, ...
- [ CodeVS冲杯之路 ] P2952
不充钱,你怎么AC? 题目:http://codevs.cn/problem/2952/ 题目讲一个细胞可分裂成 2 个,那么当前数目就是2a,a 为时间 然后 q 个细胞一起会死亡,也就是对 q 取 ...
- [bzoj3994][SDOI2015]约数个数和-数论
Brief Description 计算\(\sum_{i\leqslant n}\sum_{j\leqslant m}\sigma_0(ij)\). Algorithm Design 首先证明一个结 ...