IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【GIS开发】osgEarth依赖库PROJ(Python) -> 正文阅读

[Python知识库]【GIS开发】osgEarth依赖库PROJ(Python)

1、OSGeo/PROJ(C++)

https://proj.org/
https://github.com/OSGeo/PROJ
https://download.osgeo.org/proj

PROJ - Cartographic Projections and Coordinate Transformations Library

PROJ 是一款通用坐标转换软件,可将地理空间坐标从一个坐标参考系 (CRS) 转换为另一个坐标参考系 (CRS)。这包括制图投影和大地测量变换。PROJ 在X/MIT 开源许可下发布

PROJ 包括命令行应用程序,用于轻松转换来自文本文件或直接来自用户输入的坐标。除了命令行实用程序之外,PROJ 还公开了一个 应用程序编程接口,简称 API。API 允许开发人员在他们自己的软件中使用 PROJ 的功能,而无需自己实现类似的功能。

PROJ 最初只是作为一个制图应用程序,让用户可以使用许多不同的制图投影将大地坐标转换为投影坐标。多年来,随着需求变得明显,对基准转换的支持也慢慢进入 PROJ。今天,PROJ 支持一百多种不同的地图投影,并且可以使用除了最晦涩的大地测量技术之外的所有方法来转换基准面之间的坐标。
在这里插入图片描述
PROJ库的编译依赖库需求如下:

  • C99 compiler
  • C++11 compiler
  • CMake >= 3.9
  • SQLite3 >= 3.11: headers and library for target architecture, and sqlite3 executable for build architecture.
  • libtiff >= 4.0 (optional but recommended)
  • curl >= 7.29.0 (optional but recommended)

1.1 编译sqlite3

https://sqlite.org/download.html
这里静态编译SQLite库的64位版本。
在这里插入图片描述
将下载好的两个文件sqlite-amalgamation-3380100.zip、和sqlite-dll-win64-x64-3380100.zip解压到SQLite文件夹内,如下所示:
sqlite-amalgamation-3380100: shell.c 、sqlite3.c、sqlite3.h、sqlite3ext.h
sqlite-dll-win64-x64-3380100.zip:sqlite3.def、sqlite3.dll
在这里插入图片描述
在这里插入图片描述
打开VS2017,新建一个静态库工程,如下:
在这里插入图片描述
将下载的sqlite3的相关,添加到工程里,然后设置“不使用预编译头”,编译工程如下:
在这里插入图片描述

1.2 编译libtiff

http://download.osgeo.org/libtiff/
在这里插入图片描述
在这里插入图片描述

1.3 编译PROJ9

在这里插入图片描述

2、pyproj(python库)

在这里插入图片描述

2.1 概述

Python interface to PROJ (cartographic projections and coordinate transformations library).
在这里插入图片描述

  • Minimum supported PROJ version is 8.0
  • Minimum supported Python version is 3.8

2.2 安装

https://github.com/pyproj4/pyproj
在这里插入图片描述

pip install pyproj

在这里插入图片描述
有时候通过pip官方直接安装第三方库会失败,使用国内镜像相对稳定些。
pipy国内镜像目前有:

http://pypi.douban.com/  豆瓣
http://pypi.hustunique.com/  华中理工大学
http://pypi.sdutlinux.org/  山东理工大学
http://pypi.mirrors.ustc.edu.cn/  中国科学技术大学

阿里云:

pip install robotframework -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com 阿里云

豆瓣:

pip install pyproj -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

在这里插入图片描述

pip list

在这里插入图片描述

2.3 代码测试

  • Initializing CRS
from pyproj import CRS
crs = CRS.from_epsg(4326)
crs = CRS.from_string("epsg:4326")
crs = CRS.from_proj4("+proj=latlon")
crs = CRS.from_user_input(4326)

在这里插入图片描述

  • Transformations from CRS to CRS
from pyproj import CRS
crs_4326 = CRS.from_epsg(4326)
crs_26917 = CRS.from_epsg(26917)
print(crs_26917)

from pyproj import Transformer
transformer = Transformer.from_crs(crs_4326, crs_26917)
transformer = Transformer.from_crs(4326, 26917)
transformer = Transformer.from_crs("EPSG:4326", "EPSG:26917")
print(transformer)

在这里插入图片描述

  • Geodesic line length
from pyproj import Geod
lats = [-72.9, -71.9, -74.9, -74.3, -77.5, -77.4, -71.7, -65.9, -65.7,
        -66.6, -66.9, -69.8, -70.0, -71.0, -77.3, -77.9, -74.7]
lons = [-74, -102, -102, -131, -163, 163, 172, 140, 113,
        88, 59, 25, -4, -14, -33, -46, -61]
geod = Geod(ellps="WGS84")
total_length = geod.line_length(lons, lats)
print(f"{total_length:.3f}")

在这里插入图片描述

  • Geodesic area
from pyproj import Geod
geod = Geod('+a=6378137 +f=0.0033528106647475126')
lats = [-72.9, -71.9, -74.9, -74.3, -77.5, -77.4, -71.7, -65.9, -65.7,
        -66.6, -66.9, -69.8, -70.0, -71.0, -77.3, -77.9, -74.7]
lons = [-74, -102, -102, -131, -163, 163, 172, 140, 113,
        88, 59, 25, -4, -14, -33, -46, -61]
poly_area, poly_perimeter = geod.polygon_area_perimeter(lons, lats)
print(f"{poly_area:.3f} {poly_perimeter:.3f}")

在这里插入图片描述

from pyproj import Proj
p = Proj(proj='utm',zone=10,ellps='WGS84', preserve_units=False)
x,y = p(-120.108, 34.36116666)
# lonlat to xy
print('x=%9.3f y=%11.3f' % (x,y))
# xy to lonlat
print('lon=%8.3f lat=%5.3f' % p(x,y,inverse=True))

lons = (-119.72,-118.40,-122.38)
lats = (36.77, 33.93, 37.62 )
x,y = p(lons, lats)
print('x: %9.3f %9.3f %9.3f' % x)
print('y: %9.3f %9.3f %9.3f' % y)

lons, lats = p(x, y, inverse=True) # inverse transform
print('lons: %8.3f %8.3f %8.3f' % lons)
print('lats: %8.3f %8.3f %8.3f' % lats)

p2 = Proj('+proj=utm +zone=10 +ellps=WGS84', preserve_units=False)
x,y = p2(-120.108, 34.36116666)
print('x=%9.3f y=%11.3f' % (x,y))

p = Proj("epsg:32667", preserve_units=False)
print('x=%12.3f y=%12.3f (meters)' % p(-114.057222, 51.045))

在这里插入图片描述

后记

如果你觉得该方法或代码有一点点用处,可以给作者点个赞、赏杯咖啡;╮( ̄▽ ̄)╭
如果你感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进。o_O???
谢谢各位童鞋们啦( ′ ▽′ )ノ ( ′ ▽′)っ!!!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:18:55  更:2022-03-16 22:20:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:08:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码