python gis 经纬度 库_入门-Python-GIS坐标转换
前言
做GIS數(shù)據(jù)處理的同仁,不可避免的都會遇到坐標轉(zhuǎn)換的問題,也許很多人遇到該問題,馬上會使用各類GIS坐標轉(zhuǎn)換的工具軟件,甚至是GIS平臺,比如ArcGIS,其實除非代轉(zhuǎn)數(shù)據(jù)是未知坐標系(必須通過控制點進行配準),只要是已知坐標系,都可采用proj4的開源實現(xiàn)來完成批處理轉(zhuǎn)換,本文即以Python+pyproj來闡述如何進行批處理坐標轉(zhuǎn)換。
Python
開始之前,提幾句Python這門語言。這門語言像網(wǎng)紅,一夜之間突然變成了全民語言,除了本職程序員,在全民學編程背景下首選都會選擇Python,為什么?Python再次變成一等公民的原因,很大的功勞要算在近幾年日益成熟的機器學習和深度學習平臺,很多平臺(比如TensorFlow)都會支持Python來做開發(fā),而機器學習和人工智能又是未來熱點,因此越來越多非科班的編程人員投身到這個行業(yè),自然而然就會導致Python的興起;
Python是非常容易入門和學習的,以TensorFlow為例,當它支持C++和Python的情況下,二選一,對于一個非科班人士,答案顯而易見;
Python的出身是什么,就是主打數(shù)據(jù)批處理,而這點是提高生產(chǎn)效率的關鍵,除了IT,任何傳統(tǒng)行業(yè)在日常工作中越來越多的需要進行數(shù)據(jù)處理尤其是批處理,當Excel完成不了時,也許Python是可能的出路。注意:Python并非唯一出路,例如坐標轉(zhuǎn)換,當然也有java,.net,javascript(proj4.js)對應的proj4類庫實現(xiàn),這里不多贅述。
環(huán)境搭建
如果是從無到有的搭建步驟如下:Python安裝,推薦Python3以上,當前Python37(與Python27,有大量不兼容的函數(shù)和API,注意ArcGIS10.X平臺安裝,默認會安裝Python27,但不會沖突)官網(wǎng)
IDE環(huán)境安裝,推薦VS Code(Free),Pycharm(Buy)。
在VS Code下,安裝Python擴展。
設置VS Code對應的Python編譯器,此步在安裝有多個Python版本編譯器時,必須。
安裝pyproj類庫,pip3 install pyproj。
應用場景
為了說明如何利用proj4來完成批處理轉(zhuǎn)換,暫將場景設置如下:
記錄一組當?shù)刈鴺讼档淖鴺说奈谋疚募?此處暫考慮文本文件,其實只要是有格式說明的或白皮書的GIS格式,都可以采用批處理來完成,只不過添加相應的格式讀取類庫來進行數(shù)據(jù)預處理,比如shp,geojson等等,選擇文本文件的原因,是本文關注點是坐標轉(zhuǎn)換。),如何將這組坐標疊加到高德地圖上?(高德地圖其實是web mercator,但按國測局要求進行了偏移,網(wǎng)絡上大家稱為國測局gcj02)
坐標轉(zhuǎn)換流程
地方坐標系->WGS84->WGS84偏移(GCJ02 經(jīng)緯度)->Web Mercator偏移(GCJ02 投影后平面坐標,這步其實可選)
腳本代碼
import os
from pyproj import CRS
from pyproj import Transformer
from converter import wgs84_to_gcj02 #參見注意事項
input_file = './input.txt'
output_file = './output.txt'
#當?shù)刈鴺讼缔D(zhuǎn)WGS84
from_crs = CRS.from_wkt('PROJCS["local",GEOGCS["GCS_Xian_1980",DATUM["D_Xian_1980",SPHEROID["Xian_1980",6378140.0,298.257]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",135005.0014],PARAMETER["False_Northing",-1999781.9795],PARAMETER["Central_Meridian",109.75],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]')
to_crs = CRS.from_epsg(4326)
transformer = Transformer.from_crs(from_crs, to_crs, always_xy=True)
#WGS84轉(zhuǎn)Web Mercator
from_crs_2 = CRS.from_epsg(4326)
to_crs_2 = CRS.from_epsg(3857)
transformer_2 = Transformer.from_crs(from_crs_2, to_crs_2, always_xy=True)
with open(output_file, "w") as fo:
with open(input_file, "r") as fi:
while True:
line = fi.readline() # 逐行讀取
if not line:
break
else:
array = line.split(",") # x,y 逗號分隔
x1,y1 = transformer.transform(array[0], array[1]) # 當?shù)刈鴺讼缔D(zhuǎn)WGS84
x2,y2 = wgs84_to_gcj02(x1, y1) # gcj02 坐標偏移
x3,y3 = transformer_2.transform(x2, y2) # WGS84轉(zhuǎn)Web Mercator
fo.write(",".join(["{:.6f}".format(x3),"{:.6f}".format(y3),'\n'])) # 輸出到新文件
print('All Done!')
注意:此處借用github上WGS84轉(zhuǎn)GCJ02的Python腳本,請自行下載。
定義坐標系
常用兩種方式:
API: CRS.from_wkt
wkt坐標系描述字符串,適合自定義,也可來源于prj文件。
API: CRS.from_epsg
epsg請查詢epsg官網(wǎng),可以認為官方給通用坐標系頒發(fā)的一個唯一編碼,請記住WGS84為4326,Web Mercator為3857。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python gis 经纬度 库_入门-Python-GIS坐标转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: micropython开发idethon
- 下一篇: python idea控制台中文乱码_p