首页 > 其他分享 >pyproj运行效率优化方法

pyproj运行效率优化方法

时间:2023-08-22 17:34:30浏览次数:36  
标签:WGS84 format epsg pyproj UTM EPSG 优化 效率

介绍

pyproj是一个常用的地理坐标转换python库,它其实是对proj库的python封装,底层调用proj这个c++库。当我们对大规模地理数据执行坐标转换时,需要尽可能提高pyproj的运行效率,否则会浪费大量时间。下面介绍一些常用的方法,可有效提高pyproj运行效率。

方法

首先import pyproj

import pyproj
from pyproj import Transformer

这里以WSG84地理坐标转UTM北纬51分带投影坐标为例

EPSG_WGS84 = 4326
EPSG_WGS84_UTM_51N = 32651

1. 使用全局变量

使用下面的函数每次执行坐标转换都会new一个transformer对象,函数运行结束则销毁对象并回收内存,内存不断重复分配与回收对程序运行效率影响较大。

def lonlat_to_xy(lon, lat, epsg=EPSG_WGS84_UTM_51N):
    """
    输入经度和纬度,返回x和y(单位:m)
    """

    transformer = Transformer.from_crs("epsg:{}".format(EPSG_WGS84), "epsg:{}".format(target_epsg), always_xy=True)
    return transformer.transform(lon, lat)

我们使用全局变量来避免这一问题。全局变量初始化可以设置area_of_interest参数,含义为当前所关注的坐标经纬度范围,能进一步提高计算效率。

DEFAULT_TRANS = Transformer.from_crs("epsg:{}".format(EPSG_WGS84), "epsg:{}".format(EPSG_WGS84_UTM_51N), always_xy=True,
                                area_of_interest=AreaOfInterest(119.504167, 31.093677, 120.610871, 32.005928))

def lonlat_to_xy(lon, lat, epsg):
    if epsg == EPSG_WGS84_UTM_51N:
        return DEFAULT_TRANS.transform(lat, lon)
    transformer = Transformer.from_crs("epsg:{}".format(EPSG_WGS84), "epsg:{}".format(epsg))
    return transformer.transform(lon, lat)

2. 开启gloabal_context

如果代码确定为单线程执行,可以设置global_context为true。

pyproj.set_use_global_context(active=True)

3. 批量计算,少用循环

直接输入坐标数组批量计算,不要在循环体内对单个点进行坐标转换。

lngs = [119.50, 119.51, 119.52, 119.49, 119.50]
lats = [31.09, 31.10, 31.08, 31.00, 31.04]
xx, yy = lonlat_to_xy(lngs, lats, EPSG_WGS84_UTM_51N)

参考

标签:WGS84,format,epsg,pyproj,UTM,EPSG,优化,效率
From: https://www.cnblogs.com/greyxy/p/17649111.html

相关文章

  • 掌握JDK21全新结构化并发编程,轻松提升开发效率!
    1概要通过引入结构化并发编程的API,简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消操作,提高可靠性,并增强可观察性。这是一个预览版的API。2历史结构化并发是由JEP428提出的,并在JDK19中作为孵化API发布。它在JDK20中被JEP4......
  • 跳槽前,最后撸一遍 Webpack 核心原理、babel、性能优化!
    又到一年金三银四,面试官今年最爱问点啥?说起前端工程师进阶,Webpack是一个绕不开的话题,每年都会很多新面试题源源不断的涌来,例如:Webpack的打包原理是什么?什么是loader,什么是plugin?什么是模热更新?有什么优点?Webpack之于前端,正如同gcc/g++之于C/C++。不论你用React、Vue还是Angu......
  • 前端性能优化的技巧,都总结在这本书里了!
    今天我们给大家分享的内容,主要包括通过三大优化思维、八处优化落点、40多个典型案例,教你轻松学会“大厂”的优化套路!其中有HTML、CSS、JS的层级优化、资源加载优化、其他层级优化、前端工具与新技术对性能的提升。那么,如何进行优化呢?如何才能学习到这些内容呢?这些知识都在我们为大......
  • Postgresql涉及复杂视图查询的优化案例
    一、前言对于含有union,groupby等的视图,我们称之为复杂视图。这类的视图会影响优化器对于视图的提升,也就是视图无法与父查询进行合并,从而影响访问路径、连接方法、连接顺序等。本文通过例子,给大家展示PostgreSQL这类问题及针对该问题的优化方法。二、Union视图的优化1、......
  • BOSHIDA DC电源模块关于高效率的特点
    BOSHIDADC电源模块关于高效率的特点DC电源模块是目前应用广泛的电源系统之一,它的高效率是其最为显著地特点之一。本文将从以下三个方面进行介绍:什么是DC电源模块、DC电源模块的工作原理以及DC电源模块的高效率特点。一、什么是DC电源模块DC电源模块是一种对电源进行电压、电流......
  • select语句(优化)
    MySQL常用30种SQL查询语句优化方法原创 good7ob good7ob 2023-08-1608:00 发表于江西收录于合集#数据库4个引言 在开发和维护MySQL数据库时,优化SQL查询语句是提高数据库性能和响应速度的关键。通过合理优化SQL查询,可以减少数据库的负载,提高查询效率,为用户提供更......
  • 如何用随机方法求解组合优化问题(七)
    模拟退火算法应用举例这是一篇笔记,是对于B站up主马少平的视频(第四篇如何用随机方法求解组合优化问题(七))的学习与记录。旅行商问题一个商人要访问\(n\)个城市,每个城市访问一次,并且只能访问一次,最后再回到出发城市。问如何规划才能使得行走的路径长度最短。旅行商问题的解......
  • 使用 Terraform 与事件驱动的 Amazon CodeBuild 提升云上数据应用运维效率
    背景信息企业客户在云上部署的一系列数据应用的过程中,数据开发团队往往负责脚本内容,而其背后一系列云上资源的管理通常由一支云运维职能团队通过IaC(InfrastructreasCode)实现。然而,当数据开发团队开发及部署相应脚本内容时,不可避免会涉及到云上资源的变动,如Glue、Lambda的资......
  • 【java】[sql]使用Java程序向MySql数据库插入一千万条记录,各种方式的比较,最后发现inse
    转:https://www.cnblogs.com/heyang78/p/11666743.html我的数据库环境是mysqlVer14.14Distrib5.6.45,forLinux(x86_64)usingEditLinewrapper这个数据库是安装在T440p的虚拟机上的,操作系统为CentOs6.5.我的数据表是这样的:CREATETABLE`emp`(`Id`int(11)NOTNU......
  • 【学习笔记】优化建图相关(线段树优化,倍增优化)
    优化建图发现并没有人写得很详细的样子,那我也摆烂好惹点击查看目录目录前言线段树优化建图单点连区间区间连区间例题解题:倍增优化建图例题解题:前言众所周知,连边的时间复杂度一般是\(O(1)\),但,当连边的对象是一个连续的树上区间的时候,我们或许有更优的连边方式:优化建图。......