❶ 怎么样用Python实现地理编码
引言
今天看到一篇阿里云的文章天下武功,唯快不破,以物流行业为例,分析了 PostgreSQL 与 Greenplum 在地理位置信息处理,最佳路径算法,机器学习等方面的物流行业应用方法。其中提到了地址转换成坐标的问题,更专业些的名词应该是“地理编码”,即知道一个地址,如北京市海淀区上地十街10号,怎么样可以获取到对应的经纬度位置信息(40,116),或者反过来。
地理编码概念
很多地图相关的厂商都提供了相关的API,我们可以直接利用这些API得到这些信息。比如网络的Geocoding API。
Geocoding API是一类接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以使用C# 、C++、Java等开发语言发送请求且接收JSON、XML的返回数据。Geocoding API包括地址解析和逆地址解析功能:
Paste_Image.png
地理编码:即地址解析,由详细到街道的结构化地址得到网络经纬度信息,例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.31985,lat:39.959836”。同时,地理编码也支持名胜古迹、标志性建筑名称直接解析返回网络经纬度,例如:“网络大厦”地址解析的结果是“lng:116.30815,lat:40.056885” 。
逆地理编码:即逆地址解析,由网络经纬度信息得到结构化地址信息,例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。
不过,需要说明的一点是,若想使用网络的这套API的前提是,有网络账号并申请相应的Key。其实,除了网络之外,谷歌、ESRI、微软的Bing等都有类似的地理编码服务。不过这些服务大多没有专门针对Python的库并且彼此之间的Json结构也不一致。于是乎专治不服的Python大神做了一个专门的地理编码工具geocoder,将这些不同厂商的服务整合统一起来。
地理编码工具geocoder
首先看一下它都支持哪些公司的地理编码服务:
Provider
Optimal
Usage Policy
ArcGIS World
Bai China API key
Bing World API key
CanadaPost Canada API key
FreeGeoIP World
Geocoder.ca CA & US Rate Limit
GeocodeFarm World Policy
GeoNames World Username
GeoOttawa Ottawa
Google World Rate Limit, Policy
HERE World API key
IPInfo World
Mapbox World API key
MapQuest World API key
Mapzen World API key
MaxMind World
OpenCage World API key
OpenStreetMap World Policy
Tamu US API key
TomTom World API key
What3Words World API key
Yahoo World
Yandex Russia
TGOS Taiwan
安装
pip install geocoder
地理编码
import geocoder
g = geocoder.google("1403 Washington Ave, New Orleans, LA 70130")
g = geocoder.arcgis(u"北京市海淀区上地十街10号")
g.latlng
输出为
[29.9287839, -90.08421849999999]
也可以查看完整的geojson
g.geojson
输出为
{'bbox': [-90.0855674802915,
29.9274349197085,
-90.0828695197085,
29.9301328802915],
'geometry': {'coordinates': [-90.08421849999999, 29.9287839],
'type': 'Point'},
'properties': {'accuracy': u'ROOFTOP',
'address': u'1403 Washington Ave, New Orleans, LA 70130, USA',
'bbox': [-90.0855674802915,
29.9274349197085,
-90.0828695197085,
29.9301328802915],
'city': u'New Orleans',
'confidence': 9,
'country': u'US',
'county': u'Orleans Parish',
'encoding': 'utf-8',
'housenumber': u'1403',
'lat': 29.9287839,
'lng': -90.08421849999999,
'location': '1403 Washington Ave, New Orleans, LA 70130',
'neighborhood': u'Garden District',
'ok': True,
'place': u'ChIJGyFHWc2lIIYRYSoneaXAUiw',
'postal': u'70130',
'provider': 'google',
'quality': u'street_address',
'state': u'LA',
'status': 'OK',
'status_code': 200,
'street': u'Washington Ave'},
'type': 'Feature'}
直接用Google尝试查询中文地址时失败
g = geocoder.google(u"北京市海淀区上地十街10号")
g.ok
输出为
False
用网络应该没问题,不过我没有申请相应的key。切换到arcgis,能够成功编码
g = geocoder.arcgis(u"北京市海淀区上地十街10号")
g.latlng
输出为
[40.050934, 116.30079]
逆地理编码
g = geocoder.google([29.9287839, -90.08421849999999], method='reverse')
print g.address
print g.city
print g.state
print g.country
输出为
1403 Washington Ave, New Orleans, LA 70115, USA
New Orleans
LA
US
换成中国的地址
g = geocoder.google([40.050934, 116.30079], method='reverse')
print g.address
print g.city
print g.state
print g.country
输出为
Bai Du Da Sha, Haidian Qu, Beijing Shi, China, 100193
Beijing
Beijing Shi
CN
用arcgis的服务试试
g = geocoder.arcgis([40.050934, 116.30079], method='reverse')
print g.address
print g.city
print g.state
print g.country
输出为
None
北京市
北京市
CHN
Google转换成的是英文,但地址比较全。arcgis虽然是中文,但是详细的地址居然输出为了None,这有个X用。
其他
geocoder 的功能不止于此,它还可以查IP(包括自己的)。
g = geocoder.ip('199.7.157.0')
print g.latlng
print g.city
g = geocoder.ip('me')
print g.latlng
print g.city
输出为
[43.6934, -79.4857]
Toronto
[51.05, 13.75]
Dresden
查询一个城市的空间包围盒
g = geocoder.arcgis(u"山东")
g.bbox
输出为
{'northeast': [38.976997, 121.976998], 'southwest': [33.022997, 116.022998]}
小结
空间信息既可以利用行政区划、自然地理区域等文本信息描述,也可以用坐标系统、数字(邮编等)来标识。利用地理编码技术,可以将空间信息的地理定位要素与相应的文本信息关联起来。本文主要介绍了geocoder地理编码这一小工具,可以方便快捷的利用地图等相关厂商提供的地理编码服务,将文字描述的位置转换成地图上的经纬度,或者通过地图上的某个位置坐标获得相应的位置信息文字描述。
❷ 地理位置怎么定位坐标
地理位置定位坐标的方法如下:
准备材料:电脑、网络
1、在电脑上打开浏览器,在浏览器里打开网络地图网页;
❸ 如何用Python批量获取经纬度坐标
python根据地址获取经纬度方法一:
from geopy.geocoders import Nominatim
#使用geopy查询
def geocodeN(address):
gps=Nominatim()
location=gps.geocode(address)
return location.longitude,location.latitude
使用Geopy包 : github.com/geopy/geopy (仅能精确到城镇,具体街道无结果返回)
另外还有一种使用高德地图或网络地图API的方法,有兴趣的朋友可以参考下。
参考链接:https://panxu.net/article/8382.html
❹ 如何通过经纬度定位
方法如下:
1、打开浏览器,搜索“网络地图坐标拾取系统”
拓展资料
经纬度是经度与纬度的合称组成一个坐标系统。称为地理坐标系统,它是一种利用三度空间的球面来定义地球上的空间的球面坐标系统,能够标示地球上的任何一个位置。
纬线和经线一样是人类为度量方便而假设出来的辅助线,定义为地球表面某点随地球自转所形成的轨迹。任何一根纬线都是圆形而且两两平行。纬线的长度是赤道的周长乘以纬线的纬度的余弦,所以赤道最长,离赤道越远的纬线,周长越短,到了两极就缩为0。从赤道向北和向南,各分90°,称为北纬和南纬,分别用“N”和“S”表示。
❺ 怎样利用经纬网定位
检举| 2 小时前 扯淡般的神| 二级 的回答就特别好尤其是下边一段
经线和纬线构成经纬网,经线会标注度数(经度),纬线也会标注度数(纬度)。所以经纬网可以表示一个点的经纬度,从而确定它的具体位置。就象数学的坐标系一样,明确了横坐标和纵坐标,就能确定一个点。但是确定经纬度利用的方式有两种一种是基于卫星的gps 一种是基于运营商网络的lbs
一般来说单纯一个经纬电视不能够群定位置的 需要采用其他的技术辅助找到换个点 才会完成一次定位 目前比较多的是船只 军事 农业等行业都会用得到的
一手机举例:把手机号码加入到定位管理系统后利用系统发出定位命令 命令传输到基站 基站发出找到手机接到返回信号,再由返回信号的基站的经纬度红着几个基站信号重合位置的经纬度返回到系统就是经纬点 可以形成在电子地图中 展现出来!
参考文献:企率通外勤人员定位考勤管理系统
❻ 怎么定位自己经纬度
经纬度是经度与纬度的合称组成一个坐标系统。又称为地理坐标系统,它是一种利用三度空间的球面来定义地球上的空间的球面坐标系统,能够标示地球上的任何一个位置。请参考:http://ke..com/link?url=A-UncvEZD2_SIeEI7vizKxGB2k92rq4FdO
❼ 用python 语言 从键盘输入两点坐标(x1,y1)并计算距离
欧式距离python实现代码:
import numpy as np
x=np.random.random(10)
y=np.random.random(10)
#方法一:根据公式求解
d1=np.sqrt(np.sum(np.square(x-y)))
#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d2=pdist(X)
曼哈顿距离python实现:
import numpy as np
x=np.random.random(10)
y=np.random.random(10)
#方法一:根据公式求解
d1=np.sum(np.abs(x-y))
#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d2=pdist(X,'cityblock')
程序运行结果:
(7)给出地理坐标python中如何定位扩展阅读:
C语言实现:
#include "pch.h"
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
void main()
{
float x1, x2, y1, y2;
printf("请输入一组数据:");
while (~scanf("%f%f%f%f", &x1, &y1, &x2, &y2))//开始读取输入的数,知道文件结束。
{
printf("两点间的距离为:%.2f
", sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2)));
printf("请输入一组数据:");
}
}
❽ ∴地理坐标定位
地理坐标是用经度、纬度表示地面点位置的球面坐标。地理坐标系以地轴为极轴,所有通过地球南北极的平面,均称为子午面。子午面与地球椭球面的交线,称为子午线或经线。所有通过地轴的平面,都和地球表面相交而成为(椭)圆,这就是经线圈。一条经线是一个半(椭)圆弧。所有垂直于地轴的平面与地球椭球面的交线,称为纬线。纬线是半径不同的圆,其中半径最大的纬线称为赤道。在地球仪上,通过伦敦格林威治天文台原址的那条经线称为0度经线,也叫本初子午线。在地球仪上,同赤道平行的线叫纬线,纬线指示 东西方向,所有纬线长度不相等,纬线标注的度数就是纬度;赤道纬度为零,赤道以北为北纬,以南为南纬。在地球仪上,经纬线相互交织构成经纬网,用经度、纬度表示地面上点的位置叫地理坐标。例如:我国首都北京位于北纬40度和东经116度的交点附近,昆明位于北纬25度和东经103度的交点附近。纬度是地理坐标中的横坐标,经度是纵坐标。
❾ 经纬度坐标定位是什么
经纬度坐标是:地理坐标,用纬度、经度表示地面点位置的球面坐标。地理坐标系以地轴为极轴,所有通过地球南北极的平面均称为子午面。
地理坐标,就是用经纬度表示地面点位的球面坐标。在大地测量学中,对于地理坐标系统中的经纬度有三种提法:天文经纬度、大地经纬度和地心经纬度。
应用:
随着高科技的发展,人们对确定空中目标位置的准确性提出了更高的要求,例如雷达监测目标位置的地理坐标已经广泛应用于各种科技领域。然而在实际应用中,针对不同的设计计算需求,结合各种坐标系的特点,必须对地理坐标进行转换,以便于利用和进行辅助决策。
例如,在大地测量学中,常用天文经纬度定义地理坐标;地图学中以大地经纬度定义地理坐标,而在地图学研究及地图学的小比例尺制图中,通常将椭球体当成正球体,采用地心经纬度。