java 坐标系转换_入门-Python-GIS坐标转换
前言
做GIS數(shù)據(jù)處理的同仁,不可避免的都會遇到坐標轉換的問題,也許很多人遇到該問題,馬上會使用各類GIS坐標轉換的工具軟件,甚至是GIS平臺,比如ArcGIS,其實除非代轉數(shù)據(jù)是未知坐標系(必須通過控制點進行配準),只要是已知坐標系,都可采用proj4的開源實現(xiàn)來完成批處理轉換,本文即以Python+pyproj來闡述如何進行批處理坐標轉換。
Python
開始之前,提幾句Python這門語言。這門語言像網(wǎng)紅,一夜之間突然變成了全民語言,除了本職程序員,在全民學編程背景下首選都會選擇Python,為什么?
環(huán)境搭建
如果是從無到有的搭建步驟如下:
應用場景
為了說明如何利用proj4來完成批處理轉換,暫將場景設置如下:
記錄一組當?shù)刈鴺讼档淖鴺说奈谋疚募?#xff08;此處暫考慮文本文件,其實只要是有格式說明的或白皮書的GIS格式,都可以采用批處理來完成,只不過添加相應的格式讀取類庫來進行數(shù)據(jù)預處理,比如shp,geojson等等,選擇文本文件的原因,是本文關注點是坐標轉換。),如何將這組坐標疊加到高德地圖上?(高德地圖其實是web mercator,但按國測局要求進行了偏移,網(wǎng)絡上大家稱為國測局gcj02)
坐標轉換流程
地方坐標系->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ù)刈鴺讼缔DWGS84 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轉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:breakelse:array = line.split(",") # x,y 逗號分隔x1,y1 = transformer.transform(array[0], array[1]) # 當?shù)刈鴺讼缔DWGS84x2,y2 = wgs84_to_gcj02(x1, y1) # gcj02 坐標偏移x3,y3 = transformer_2.transform(x2, y2) # WGS84轉Web Mercatorfo.write(",".join(["{:.6f}".format(x3),"{:.6f}".format(y3),'n'])) # 輸出到新文件print('All Done!')注意:
定義坐標系
常用兩種方式:
API: CRS.from_wkt
wkt坐標系描述字符串,適合自定義,也可來源于prj文件。
API: CRS.from_epsg
epsg請查詢epsg官網(wǎng),可以認為官方給通用坐標系頒發(fā)的一個唯一編碼,請記住WGS84為4326,Web Mercator為3857。
總結
以上是生活随笔為你收集整理的java 坐标系转换_入门-Python-GIS坐标转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kdj指标三条线代表的意思
- 下一篇: win10怎么装原版xp系统下载 win