前言

做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。

应用场景

为了说明如何利用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:

break

else:

array = line.split(",") # x,y 逗号分隔

x1,y1 = transformer.transform(array[0], array[1]) # 当地坐标系转WGS84

x2,y2 = wgs84_to_gcj02(x1, y1) # gcj02 坐标偏移

x3,y3 = transformer_2.transform(x2, y2) # WGS84转Web Mercator

fo.write(",".join(["{:.6f}".format(x3),"{:.6f}".format(y3),'\n'])) # 输出到新文件

print('All Done!')

注意:此处借用github上WGS84转GCJ02的Python脚本,请自行下载。

定义坐标系

常用两种方式:

API: CRS.from_wkt

wkt坐标系描述字符串,适合自定义,也可来源于prj文件。

API: CRS.from_epsg

epsg请查询epsg官网,可以认为官方给通用坐标系颁发的一个唯一编码,请记住WGS84为4326,Web Mercator为3857。

python gis 经纬度 库_入门-Python-GIS坐标转换相关推荐

  1. python爬虫数据提取_入门Python爬虫——提取数据篇

    原标题:入门Python爬虫--提取数据篇 作者: 李菲 来源:人工智能学习圈 前言 在提取数据这一环节,爬虫程序会将我们所需要的数据提取出来.在上一篇文章<入门Python爬虫 -- 解析数据 ...

  2. python人脸识别库_基于Python的face_recognition库实现人脸识别

    Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...

  3. python需要具备什么_入门Python需要掌握哪些技能呢?

    随着人工智能时代的来临,Python开始崭露头角并迅速吸引了人们的广泛关注.很多人想要从事Python开发,但零基础入门Python,需要了解什么呢?看看你都掌握了吗? 1.Python是如何被解释执 ...

  4. python 函数式编程 库_使用Python的toolz库开始函数式编程的方法

    在这个由两部分组成的系列文章的第二部分中,我们将继续探索如何将函数式编程方法中的好想法引入到 Python中,以实现两全其美. 在上一篇文章中,我们介绍了不可变数据结构 . 这些数据结构使得我们可以编 ...

  5. python爬虫基础知识点_入门Python爬虫知识点梳理

    [小宅按]爬虫基本原理就是通过网络请求从远程服务器下载数据的过程,而这个网络请求背后的技术就是基于 HTTP 协议.作为入门爬虫来说,用户需要了解 HTTP协议的基本原理,虽然 HTTP 规范用一本书 ...

  6. python中csv库_关于python 自带csv库的使用心得 附带操作实例以及excel下乱码的解决...

    因为上次帮我们产品处理过一个文件,他想生成能excel处理操作的.但是上次由于时间非常紧张,所以并没有处理好. 正好无聊就来好好研究一下 ,找算法要了几个 csv文件.来好好玩一玩. 全篇使用了pyt ...

  7. python的opencv库_用于Python的Opencv可视化库安装,面向,OpenCV,视觉

    计算机视觉最重要的库莫过于OpenCV,ananconda功能很强大,但是也有比较重要的几个库,还没做成集成开发环境,需要自己安装. 在安装的过程中也走了许多弯路,因为安装的方法有许多许多,有些随着O ...

  8. python连接opencv库_利用Python和OpenCV库将URL转换为OpenCV格式的方法

    今天的博客是直接来源于我自己的个人工具函数库. 过去几个月,有些PyImageSearch读者电邮问我:"如何获取URL指向的图片并将其转换成OpenCV格式(不用将其写入磁盘再读回)&qu ...

  9. python 埋点 库_测试~python库介绍(一) opencv

    前言 从事测试工作已有4年了,期间通过python编写了很多自动化脚本,接下来的日子和大家分享一下测试工作上常用的python库,适合常年从事黑盒测试的同学了解一些入门级技巧. UI响应时间评测~前身 ...

最新文章

  1. C++/C++11中std::exception的使用
  2. Redis 生产架构选型解决方案
  3. 实现pv uv统计_程序员修仙之路优雅快速的统计千万级别uv
  4. 关于iis部署的一些小问题
  5. NET问答: 如何使用 C# 直接从 JSON String 中提取特定值 ?
  6. .Net对SQL数据库的web备份
  7. 大数据学习笔记31:Java程序访问高可用Hadoop集群
  8. 礼遇双十二,送12份福利好事成双
  9. java如何集成dubbo_boot集成dubbo踩过的坑
  10. 10G ocp 题库
  11. 框架设计--第十章 MyBatis与Spring的整合--习题答案
  12. js对加法计算、减法计算、乘法计算、除法计算的精度处理
  13. C语言自由落体程序咋写,C语言实现 小球自由落体问题
  14. android手机闹钟程序,Android手机闹钟用法实例
  15. Python制作微信小助手
  16. React Native动画Animated详解
  17. Visual C++实现黑白棋游戏项目实战二:界面的设计与实现(附源码和资源 超详细)
  18. 追寻红色记忆、晋国文明之思考毕业季研学营
  19. 服务器测评文档,十年磨一剑,腾讯自研TBase数据库有奖测评
  20. 关于thinkpad安装win10操作系统

热门文章

  1. POJ 3167 Cow Pattern ★(KMP好题)
  2. android播放mp3方法,Android之MediaPlayer播放音频与视频
  3. java 函数名调用_粉丝提问|c语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数...
  4. mysql还原数据库后日期显示3000_mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法...
  5. 鸿蒙开源小米能用吗,鸿蒙2.0开源,任何品牌都可以使用!小米用不用?
  6. php json与接口的使用,api接口与json
  7. 合工大计算机研究生毕业工资,合肥工业大学2019届薪酬统计
  8. mysql show full_mysql: show full processlist 详解
  9. 游戏引擎和编程语言的关系
  10. 广汽研究院BMS软件工程师_感·创未来 2020广汽科技日有哪些干货?