最近想做一个简单的地理位置分析,比如获取一些城市公交站点对应的geohash,geohash其实是将平时常见的经纬度进行了降维,这样可以进行类似附近的餐馆等内容的分析。
1. 正逆地理编码
正/逆地理编码服务(又名Geocoding API)是一类Web API接口服务;
正向地理编码服务提供将结构化地址数据(如:北京市海淀区上地十街十号)转换为对应坐标点(经纬度)功能;
逆向地理编码服务提供将坐标点(经纬度)转换为对应位置信息(如所在行政区划,周边地标点分布)功能。
1.1 百度地图api正逆地理编码存在偏差
可以直接使用的百度url:后面直接跟地址就好如上图(key不知道是谁的),可以发现百度的搜索分词权重直接把雍和宫地铁站定位到了雍和宫,
1.2 高德地图接口
发送一个request请求,带上地理位置和api key 即可返回一个包含了经纬度str。
地理编码接口:
# -*- coding: utf-8 -*-
import requests
def geocode_change_key(address,key):
parameters = {'address': address, 'key': key}
base = 'http://restapi.amap.com/v3/geocode/geo'
response = requests.get(base, parameters)
answer = response.json()
return str(answer['geocodes'][0]['location']).split(',')
2. 坐标系
谷歌地图采用的是WGS84地理坐标系(中国范围除外)
谷歌中国地图、搜搜中国地图、高德地图采用的是GCJ02地理坐标系
百度采用的是BD09坐标系。
而设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系。
所以我们要根据得到的经纬度的坐标类型和地图厂商类型在地图上标点,否则会出现获取的位置误差。为什么不统一用WGS84地理坐标系这就是国家地理测绘总局对于出版地图的要求,出版地图必须符合GCJ02坐标系标准,也就是国家规定不能直接使用WGS84地理坐标系。
2.1 我们常说的坐标系
WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
GCJ02:又称火星坐标系,是由中国国家测绘局制定的地理坐标系统,是由WGS84加密后得到的坐标系。
BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。
2.2 坐标转码关键代码
# -*- coding: utf-8 -