使用 Cartopy 获取投影地图中的坐标

2024-02-16

我正在尝试使用 Cartopy 获取地图特征的坐标,但我想获取地图投影坐标而不是原始投影中的数据。

例如:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

fig = plt.figure(figsize=(10, 10))
ax = plt.axes(projection=ccrs.epsg(3857))
fig.add_axes(ax)
ax.coastlines()
ax.set_global()
lines = ax.plot((0, 360), (-85.06, 85.06), transform=ccrs.PlateCarree())
fig.show()

前面的代码使用地图投影显示了具有两条线的地图,但是lines(一个列表matplotlib.lines.Line2D实例)只是一个具有数据原始投影坐标的对象(lines[0].get_data()--->(array([ 0, 360]), array([-85.06, 85.06]))).

在交互式绘图上,获得了 Qt5 后端fig.show(),我可以看到坐标EPSG:3857 and in PlateCarree当光标位于地图上时,我想知道是否有一种简单的方法可以获取lines in EPSG:3857坐标。

EDIT: 上面的例子相当简单。我尝试将其简单化以便更好地理解,但也许更好地展示真正的问题。

我有一个经度范围为 [0, 360] 的数据网格。我可以修改数组,以便输入范围在 [-180, 180] 内,并且我使用 Cartopy/Matplotlib 来绘制轮廓。从轮廓中我得到了matplotlib.contour.QuadContourSet与几个matplotlib.collections.LineCollection。从每个matplotlib.collections.LineCollection我可以获得matplotlib.path.Paths,我想要每个路径的坐标EPSG:3857而不是原来的PlateCarree所以我可以用cartopy.mpl.patch.path_to_geos将每个 Path 转换为形状良好的几何对象EPSG:3857无需提取即可投影vertices从每个路径,将它们转换为PlateCarree to EPSG:3857然后使用转换后的坐标创建一个新路径以使用cartopy.mpl.patch.path_to_geos获得我需要的 crs 中的几何形状。


该问题要求使用 Cartopy 的功能进行坐标转换,也许还有其他功能。 这里我提供了执行坐标变换和计算检查的代码。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import numpy as np

# Test data in geographic lon, lat (degrees)
lons = np.array((0, 360.01))      # any number of longitude
lats = np.array((-85.06, 85.06))  # .. longitude

# define all CRS
crs_longlat = ccrs.PlateCarree() 
crs_3857 = ccrs.epsg(3857)

# Transformation function
def coordXform(orig_crs, target_crs, x, y):
    """
    Converts array of (y,x) from orig_crs -> target_crs
    y, x: numpy array of float values
    orig_crs: source CRS
    target_crs: target CRS
    """

    # original code is one-liner
    # it leaves an open axes that need to plt.close() later
    # return plt.axes( projection = target_crs ).projection.transform_points( orig_crs, x, y )

    # new improved code follows
    xys = plt.axes( projection = target_crs ).projection.transform_points( orig_crs, x, y )
    # print(plt.gca())  # current axes: GeoAxes: _EPSGProjection(3857)
    plt.close()         # Kill GeoAxes
    # print(plt.gca())  # AxesSubplot (new current axes)
    return xys

# Transform geographic (lon-lat) to (x, y) of epsg(3857)
xys = coordXform(crs_longlat, crs_3857, lons, lats)
for ea in xys:
    print("(x, y) meters: " + str(ea[0]) + ', ' + str(ea[1]))

#Output(1)    
#(x, y) meters: 0.0, -20006332.4374
#(x, y) meters: 1113.19490794, 20006332.4374

# Computation check
# Transform (x, y) of epsg(3857) to geographic (lon-lat), degrees
xs = xys[:,0]  # all x's
ys = xys[:,1]  # all y's
lls = coordXform(crs_3857, crs_longlat, xs, ys)
for ea in lls:
    print("(lon, lat) degrees: " + str(ea[0]) + ', ' + str(ea[1]))

#Output(2)
#(lon, lat) degrees: 0.0, -85.06
#(lon, lat) degrees: 0.01, 85.06

# plt.close() # no need now

Edit 2

根据建设性意见,上面的变换函数可以写成如下:

def coordXform(orig_crs, target_crs, x, y):
    return target_crs.transform_points( orig_crs, x, y )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Cartopy 获取投影地图中的坐标 的相关文章

  • 更改 x 轴比例

    我使用 Matlab 创建了这个图 使用 matplotlib x 轴绘制大数字 例如 100000 200000 300000 我想要 1 2 3 和 10 5 之类的值来指示它实际上是 100000 200000 300000 有没有一
  • 如何在PIL中从ImageDraw中获取图像?

    我在我的项目中使用 PIL 并且有 ImageDraw 对象 我想获取在 ImageDraw 对象上绘制的图像 我如何获取图像 这是你想要的 from PIL import Image ImageDraw im Image new RGBA
  • bs4 `next_sibling` VS `find_next_sibling`

    我在使用时遇到困难next sibling 并且类似地与next element 如果用作属性 我不会得到任何返回 但如果用作find next sibling or find next 然后就可以了 来自doc https www cru
  • 当变量取特定值时如何使 PyCharm 中断?

    我有一本大字典 其中一些元素偶尔会出现非法值 我想弄清楚非法值从何而来 PyCharm 应该不断监视我的字典的值 一旦它们中的任何一个取了非法值 它就应该中断并让我检查程序的状态 我知道我可以通过为我的字典创建一个 getter sette
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • FTP 下载冻结整个应用程序

    我正在尝试从 FTP 服务器下载一个大约 100 MB 的文件 这是一个测试 bin 文件 因为我正在测试该应用程序 我猜我将来想要下载的文件会更重 当我想下载文件时 整个应用程序就会冻结 几秒钟后它就会下载文件 该文件已完成 并且已成功下
  • 在Python中,如何将矩阵逆时针旋转90度?

    gt gt gt def rotate matrix k List List int For example if I have m 1 2 3 2 3 3 5 4 3 rotate matrix m should give me 3 3
  • str.translate 与 str.replace - 何时使用哪一个?

    何时以及为什么使用前者而不是后者 反之亦然 目前尚不完全清楚为什么有些人使用前者以及为什么有些人使用后者 它们有不同的目的 translate只能用任意字符串替换单个字符 但一次调用可以执行多次替换 它的参数是一个特殊的表 它将单个字符映射
  • 来自 pandas 数据帧的烛台图,用日期替换索引

    此代码给出了带有移动平均线的烛台图 但 x 轴位于索引中 我需要 x 轴位于日期中 需要做什么改变 import numpy as np import pandas as pd import matplotlib pyplot as plt
  • 无法在 virtualenv 中安装 libxml2

    我有一个问题libxml2蟒蛇模块 我正在尝试将其安装在python3 虚拟环境使用以下命令 pip install libxml2 python3 但它显示以下错误 Collecting libxml2 python3 Using cac
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 使用 if 语句的网格网格和用户定义函数的真值不明确

    假设我有一个函数f x y 足够光滑 然而 有些值仅在有限的意义上存在 以sin x x的价值x 0只存在于极限 x gt 0 中 在一般情况下 我用一个来处理这个问题if陈述 如果我在情节中使用它meshgrid我收到一条错误消息 Val
  • 如何获取分类数据的分组条形图

    I have a big dataset with information about students And I have to build a graph of dependencies between different value
  • 导入 pandas 显示 ImportError: 无法导入名称哈希表

    我已经在 python 3 3 上安装了 pandas 代码如下 import csv import pandas from pandas import DataFrame csvdata pandas read csv datafile
  • 无法让gunicorn使用Python 3

    我有 Ubuntu NGINX Gunicorn 以及可与 Python 3 设置配合使用的虚拟环境 但我的 Flask 应用程序仍然以 2 7 6 运行 我已系统地按照说明进行操作 但找不到解决方案 Gunicorn 配置文件 progr
  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to
  • 如何将字符串转换为浮点数? [复制]

    这个问题在这里已经有答案了 我需要转换变量 pi string 3 1415926 变成一个浮子 这是我正在处理的事情 你的线路应该是pi float float pi string float pi string 是一个浮点值 你不能给它
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • gitlab-ci 的缓存虚拟环境

    我使用 Gitlab CI 脚本缓存了 Pip 包 所以这不是问题 现在我还想赶上Conda虚拟环境 因为它减少了设置环境的时间 我缓存了一个虚拟环境 不幸的是 最后需要很长时间才能缓存所有 venv 文件 我尝试仅缓存 CI PROJEC

随机推荐

  • 将 x86 与 Blazor 结合使用时“无法启动调试适配器”

    我正在尝试使用 x86 中的 ASP NET 托管 只是基本模板应用程序 来调试 Blazor WebAssembly 应用程序 如果我使用 x64 平台进行调试 应用程序可以正常运行 但是 如果我将所有项目 服务器 客户端和共享 切换到
  • Tomcat 是否使用 pl/sql 模块的缓存版本?

    好吧 想象一下这种情况 我对 pl sql 模块进行了更改 重新编译它 一切都很好 没有错误 然后 我尝试访问在 Tomcat 上运行的应用程序上的 GUI 屏幕 该屏幕调用 oracle 数据库中的 pl sql 模块 当我提交应该调用
  • 您可以更改 logback 中 %caller{0} 的输出以模仿 log4j %l 说明符吗?

    我正在从 log4j 迁移到 Logback Log4j 具有 l 格式说明符 它将打印出调用方法的完全限定名称 后跟调用者在括号之间获取文件名和行号 示例 com my company MyClass doSomething MyClas
  • 在同一域上使用 firebase 函数的 oAuth 的跨域状态 cookie 问题

    我正在为 firebase 平台的用户实现 oAuth 登录 一切正常 除非用户has 禁用跨域 cookie 这就是我所做的 从我的域 应用程序 用户被重定向到云功能 can 函数设置statecookie 并将用户重定向到 oAuth
  • 在 R 中打印小于或等号?

    我尝试使用 u2264对于小于或等号 gt names table A1 lt c x P X x P X u2264x gt print table A1 但这出现在输出中 gt x P X x P X x gt 1 2 0 562 0
  • 在 JavaScript 中从字符串生成随机数

    我想制作一个客户端 A B 测试库 每个用户都有一个存储在 cookie 中的随机数 每个测试都有一个测试名称和一系列选项 我需要一个函数 根据用户的随机数 测试名称和选项来选择随机选项 当然 该函数必须始终为给定的一组输入返回相同的选项
  • iTunesConnect Testflight 没有适用于 iOS 的版本?

    我在向我的 iOS 版本之一添加管理员时遇到问题 当我点击我的构建时 它显示我有 2 个人可以测试它 但这不是我所期待的 我期待 3 个人 因为如果我单击 iTunesConnect 用户 我会看到 3 个人 但由于某种原因 我的朋友Yu
  • jQuery 中 HTML 表单标签的有效/无效名称是什么?

    这是我在这里遇到的错误的结果jQuery form serialize 仅返回序列化表单的一个元素 https stackoverflow com questions 1290011 jquery form serialize return
  • JPA 参照完整性约束违规 oneToMany 和批量操作查询

    My domain model diagram looks like this 正如您所看到的 我在学生和出勤之间以及出勤和研讨会之间有一个一对多的关系 下面是学生类和出勤类 以及我的帮助类 初始化程序 package com semina
  • 音频编程入门[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MYSQL LEFT JOIN 与 GROUP BY

    我有 2 个查询 我需要加入它们 我需要将员工根据活动的工作时间与公司在规定时间段内同一活动的总工作时间进行比较 第一个查询是 SELECT u login a article p p article SUM p p going SUM p
  • 创建与时间相关的圆圈动画

    嗨 我尝试制作动画 调用函数时绘制的 3 个圆圈之一应从右向左移动 首先应在画布上绘制一个随机 黄色 蓝色或橙色 圆圈 然后在 3 秒后绘制下一个随机圆圈 然后在 2 秒后 8秒到现在为止 我怎样才能做到这一点 现在 当主循环再次开始运行时
  • 将 init() 设为 NSObject 子类私有

    班上FooClass应该只允许通过其交互sharedInstance 我试图通过不允许任何人访问来防止滥用init of FooClass 我尝试了几种不同的方法 但没有一个有效 使用私有关键字 class FooClass NSObjec
  • curl 如何基于本地 gcloud 的 CLI 身份验证向 Google Cloud 进行身份验证?

    我的脚本使用了一系列gcloud命令 当然 gcloud 已经过身份验证 我需要使用curl来访问gcloud无法使用的GCP REST API 我可以通过在 Cloud Console 中生成 JSON 凭据文件来完成此操作 但我不想将其
  • 使用 C++ 自动 Lua 绑定

    我正在构建一个简单的 2D 游戏引擎 它变得越来越大 暴露 Lua 中的所有功能将是不可能的 所以我试图自动化一点这个过程 无论如何 是否可以一次从堆栈中获取所有 n 个参数 具有不同类型 并将它们直接注入到 C 函数中 我已经自动化了函数
  • Jax-RS 重载方法/路径执行顺序

    我正在为我的应用程序编写一个 API 我对 Jax RS 如何处理某些场景感到困惑 例如我定义了两条路径 Path user name a zA Z and Path user me 我指定的第一条路径清楚地包含第二条路径 因为正则表达式包
  • Django多表继承和模型创建

    我有一些代码遵循文档页面上给出的多表继承示例 http docs djangoproject com en dev topics db models multi table inheritance http docs djangoproje
  • MVC , Asp.net 中的波斯日历

    我在 MVC 中使用 DateTime 变量 我想显示波斯日历 Html EditorFor x gt x ProductionDate 我该怎么做 我找到了解决方案1 前往www amib ir weblog page id 316 ht
  • 如何将屏幕录制成 gif 格式? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这就是我正在谈论的例子 你怎么能做到这一点 这取决于您的平台 并且有很多方法可以做到这一点 在 Mac OSX 上 有一个内置的 Quic
  • 使用 Cartopy 获取投影地图中的坐标

    我正在尝试使用 Cartopy 获取地图特征的坐标 但我想获取地图投影坐标而不是原始投影中的数据 例如 import matplotlib pyplot as plt import cartopy crs as ccrs fig plt f