❶ 怎麼樣用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度的交點附近。緯度是地理坐標中的橫坐標,經度是縱坐標。
❾ 經緯度坐標定位是什麼
經緯度坐標是:地理坐標,用緯度、經度表示地面點位置的球面坐標。地理坐標系以地軸為極軸,所有通過地球南北極的平面均稱為子午面。
地理坐標,就是用經緯度表示地面點位的球面坐標。在大地測量學中,對於地理坐標系統中的經緯度有三種提法:天文經緯度、大地經緯度和地心經緯度。
應用:
隨著高科技的發展,人們對確定空中目標位置的准確性提出了更高的要求,例如雷達監測目標位置的地理坐標已經廣泛應用於各種科技領域。然而在實際應用中,針對不同的設計計算需求,結合各種坐標系的特點,必須對地理坐標進行轉換,以便於利用和進行輔助決策。
例如,在大地測量學中,常用天文經緯度定義地理坐標;地圖學中以大地經緯度定義地理坐標,而在地圖學研究及地圖學的小比例尺制圖中,通常將橢球體當成正球體,採用地心經緯度。