日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

java 坐标系转换_入门-Python-GIS坐标转换

發布時間:2025/4/5 python 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 坐标系转换_入门-Python-GIS坐标转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

做GIS數據處理的同仁,不可避免的都會遇到坐標轉換的問題,也許很多人遇到該問題,馬上會使用各類GIS坐標轉換的工具軟件,甚至是GIS平臺,比如ArcGIS,其實除非代轉數據是未知坐標系(必須通過控制點進行配準),只要是已知坐標系,都可采用proj4的開源實現來完成批處理轉換,本文即以Python+pyproj來闡述如何進行批處理坐標轉換。

Python

開始之前,提幾句Python這門語言。這門語言像網紅,一夜之間突然變成了全民語言,除了本職程序員,在全民學編程背景下首選都會選擇Python,為什么?

  • Python再次變成一等公民的原因,很大的功勞要算在近幾年日益成熟的機器學習和深度學習平臺,很多平臺(比如TensorFlow)都會支持Python來做開發,而機器學習和人工智能又是未來熱點,因此越來越多非科班的編程人員投身到這個行業,自然而然就會導致Python的興起;
  • Python是非常容易入門和學習的,以TensorFlow為例,當它支持C++和Python的情況下,二選一,對于一個非科班人士,答案顯而易見;
  • Python的出身是什么,就是主打數據批處理,而這點是提高生產效率的關鍵,除了IT,任何傳統行業在日常工作中越來越多的需要進行數據處理尤其是批處理,當Excel完成不了時,也許Python是可能的出路。
  • 注意:Python并非唯一出路,例如坐標轉換,當然也有java,.net,javascript(proj4.js)對應的proj4類庫實現,這里不多贅述。

    環境搭建

    如果是從無到有的搭建步驟如下:

  • Python安裝,推薦Python3以上,當前Python37(與Python27,有大量不兼容的函數和API,注意ArcGIS10.X平臺安裝,默認會安裝Python27,但不會沖突)官網
  • IDE環境安裝,推薦VS Code(Free),Pycharm(Buy)。
  • 在VS Code下,安裝Python擴展。
  • 設置VS Code對應的Python編譯器,此步在安裝有多個Python版本編譯器時,必須。
  • 安裝pyproj類庫,pip3 install pyproj。
  • 注意:也可參考微軟官方的Python教程

    應用場景

    為了說明如何利用proj4來完成批處理轉換,暫將場景設置如下:

    記錄一組當地坐標系的坐標的文本文件(此處暫考慮文本文件,其實只要是有格式說明的或白皮書的GIS格式,都可以采用批處理來完成,只不過添加相應的格式讀取類庫來進行數據預處理,比如shp,geojson等等,選擇文本文件的原因,是本文關注點是坐標轉換。),如何將這組坐標疊加到高德地圖上?(高德地圖其實是web mercator,但按國測局要求進行了偏移,網絡上大家稱為國測局gcj02)

    坐標轉換流程

    地方坐標系->WGS84->WGS84偏移(GCJ02 經緯度)->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'#當地坐標系轉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轉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]) # 當地坐標系轉WGS84x2,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!')

    注意:

  • 首先請參考pyproj4的API
  • 此處借用github上WGS84轉GCJ02的Python腳本,請自行下載。
  • 定義坐標系

    常用兩種方式:

    API: CRS.from_wkt

    wkt坐標系描述字符串,適合自定義,也可來源于prj文件。

    API: CRS.from_epsg

    epsg請查詢epsg官網,可以認為官方給通用坐標系頒發的一個唯一編碼,請記住WGS84為4326,Web Mercator為3857。

    總結

    以上是生活随笔為你收集整理的java 坐标系转换_入门-Python-GIS坐标转换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。