postgis如何处理使用不同SRID发送的坐标

2024-03-26

我正在运行 django 应用程序,并且我正在为我的数据库使用 PostGis 扩展。我试图更好地了解发送坐标时幕后发生的情况,特别是因为我正在使用转换为不同 SRID 的不同坐标系。我的问题有三个:

  1. 在数据库中创建点或多边形时,django/postgis 是否处理转换。
  2. 我可以使用不同的 SRID 查询它吗
  3. 是否建议使用默认的SRID=4326

假设我有一个这样的模型(注意我正在设置标准 SRID=4326):

class MyModel(models.Model):

    name = models.CharField(
        max_length=120,
    )
    point = models.PointField(
        srid=4326,
    )
    polygon = models.PolygonField(
        srid=4326,
    )
  1. 现在我用不同的 SRIDS 发送不同的坐标和多边形。

我在 django 文档中读到:

此外,如果 GEOSGeometry 与字段处于不同的坐标系(具有不同的 SRID 值),则将使用空间数据库的转换过程将其隐式转换为模型字段的 SRID

因此,如果我理解正确的话,这意味着当我发送这样的 API 请求时:

data = {
   "name": "name"
   "point": "SRID=2345;POLYGON ((12.223242267 280.123144553))"
   "polygon": "SRID=5432;POLYGON ((133.2345662 214.1429138285, 123.324244572 173.755820912250072))"

}

response = requests.request("post", url=url, data=data)

多边形和点都将正确转换为 SRID=4326?

EDIT:

当我发送一个点时SRID=25832;POINT (11.061859 49.460983) I get 'SRID=4326;POINT (11.061859 49.460983)'来自数据库。当我发送一个多边形时'SRID=25832;POLYGON ((123.2796155732267 284.1831980485285, ' '127.9249715130572 273.7782091450072, 142.2351651215613 ' '280.3825718937042, 137.558146278483 290.279508688337, ' '123.2796155732267 284.1831980485285))'我得到一个多边形'SRID=4326;POLYGON ((4.512360573651161 0.002563158966576373, ' '4.512402191765552 0.002469312460126783, 4.512530396754145 ' '0.002528880231016955, 4.512488494972807 0.00261814442892858, ' '4.512360573651161 0.002563158966576373))'来自数据库

  1. 我可以使用不同的 SRID 查询它吗

不幸的是,我还没有找到一种方法来将相同的点查询回其原始 SRID。这可能吗?

  1. 最后,我主要处理欧洲的坐标,但我也可能必须包括来自世界各地的零星坐标。是SRID=4326一个好的使用标准?

非常感谢您提前提供的所有帮助。非常感谢。


改变几何形状的 SRS 不仅仅是改变其 SRID。因此,如果由于某种原因在变换后坐标返回完全相同的值,则很可能根本没有变换。

本示例使用ST_Transform https://postgis.net/docs/ST_Transform.html变换几何图形25832 to 4326。自己看看结果:

WITH j (geom) AS (
 VALUES('SRID=25832;POINT (11.061 49.463)'::geometry))
SELECT ST_AsEWKT(geom),ST_AsEWKT(ST_Transform(geom,4326)) FROM j;

 

       st_asewkt            |                      st_asewkt                       
---------------------------------+------------------------------------------------------
 SRID=25832;POINT(11.061 49.463) | SRID=4326;POINT(4.511355210946569 0.000446125446657)
(1 Zeile)
  • 顺便说一句,您问题中的多边形变换是正确的。

确保 django 确实存储了您提到的值。寄一个25832几何并直接检查数据库中的SRS。如果您仅使用 django 进行检查,则可能会在请求中再次将坐标转换回原处,这可能会解释您没有看到任何差异。

对于你的问题:

SRID=4326 是一个好的标准吗?

WGS84 是全球最常用的 SRS,所以我倾向于说是,但这完全取决于您的用例。如果您不确定要使用哪个 SRS,则可能表明您的用例并未对其施加任何限制。因此,请坚持使用 WGS84,但请记住,不要在应用程序中混合不同的 SRS。顺便说一句:如果您尝试将几何图形存储在同一个表的多个 SRS 中,PostgreSQL 将引发异常;)

进一步阅读:ST_AsEWKT https://postgis.net/docs/ST_AsEWKT.html, WGS84 https://georepository.com/crs_4326/WGS-84.html

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

postgis如何处理使用不同SRID发送的坐标 的相关文章

随机推荐

  • VSTS - 应用程序中心 - Yaml - 找不到端点

    我正在尝试使用 yaml 设置我的构建定义 我正在使用AppCenter分发任务 https github com Microsoft vsts tasks tree master Tasks AppCenterDistribute 它需要
  • typeorm - 如何向“多对多”表添加额外字段?

    例如 3 tables user user business lines business line business line 那些创建者typeorm与声明User ManyToMany type gt BusinessLine Joi
  • Firebase 仅部署函数流程

    如果我有两个 Firebase 函数 fire1 and fire2 共享一个辅助函数 doSum 将部署firebase deploy only functions fire1改变环境fire2 不 每个功能彼此完全独立 每个已部署的函数
  • 如何使用 grpc 修复 python 中的“类型错误:不允许位置参数”

    我正在使用 Ubuntu 18 04 3 LTS x64 在 python 中使用 grpc 设置微服务 我尝试改变分配参数的方式 从我的 protoc 文件重新生成代码 客户代码 class Cliente def IniciarClie
  • ie6中缺少div高度的解决办法

    我正在使用一个空 div 通过设置来显示一行高度 3 像素 它在所有浏览器中都能正常工作 但在ie6显示的高度 div20 像素高度 即使对于 height 0px 它也保持不变 但其他属性的变化反映但不反映高度 并且没有重复的 CSS 条
  • 总结树上的值

    我使用树控件来查看一些基于嵌套 父子 表的分层项目 每个节点都有一个 NameValue 格式 接受 name 和 value 但只有叶子 最后一个节点 具有整数值 并且父节点的值保留为空 仅是它们具有的名称 我想总结值 以便每个父节点都保
  • 获取 PostgreSQL 中一个月前的时间戳

    我有一个 PostgreSQL 数据库 其中一个表快速增长得非常大 大约每月几百万行 因此我想定期将该表的内容存档到一个单独的表中 我打算使用 cron 作业每晚执行 sql 文件 将超 过一个月的所有行存档到另一个表中 我的查询工作正常
  • 如何使用 iOS WKWebView 注入 JavaScript 回调来检测 onclick 事件?

    我正在使用一个WKWebView显示一个包含三个按钮的 HTML 的网站 我想在单击特定按钮时在本机应用程序中运行一些 Swift 代码 关于 HTML 这三个按钮如下所示
  • 如何使用node.js从蓝牙设备接收数据

    我是 javascript 和 node js 的新手 目前从事医疗项目 首先我将解释我的工作 我必须从蓝牙设备接收数据 正常血压率 脉搏率 并使用 node js 在 Web 应用程序中显示读数 我不知道如何从蓝牙设备 病人监护仪 接收数
  • 管理用户对 ASP.NET 中页面的访问

    我正在使用 MembershipProvider 目前有 3 个角色 用户 超级用户 管理员 另外 我还有只有管理员和超级用户才能看到的页面 对于这些页面 我使用 Web 配置中的配置
  • 如果第一个“return”之后有一个“else”,那么性能是否重要?

    我现在看到了两种不同的方法来创建布尔返回方法 bool Case1 if A return true else return false bool Case2 if A return true return false 哪一个更快 不写还有
  • Symfony2:动态生成嵌入表单

    Symfony2 有可能表格动态生成 http symfony com doc current cookbook form dynamic form modification html cookbook form events submit
  • 八叉树邻居搜索

    我有一个八叉树 它存储基于体素的流体 当我模拟流体时 我需要访问当前节点周围的叶子 如何实现这样的搜索 您可以假设该节点存储了一个指向其父节点的指针 也许还需要其他数据 假设每个八叉树节点还保存其在八叉树中的 3D 索引 1 及其深度 生成
  • kube proxy日志无法打开服务Nodeport

    服务类型 节点端口 问题 无法访问 clusterIP Nodeport 并找到 kube proxy pod 日志 如下所示 无法打开端口 跳过它 err listen tcp4 32060 bind 地址已在使用中 port Descr
  • 当我尝试通过 CLI 部署 Azure 云服务时,“对象引用未设置为对象的实例”

    我在 Azure PowerShell 中运行以下命令来部署我的节点项目 Publish AzureServiceProject ServiceName
  • 移动没有历史记录的 Subversion 存储库

    有很多关于使用版本历史记录移动 Subversion 历史记录的帖子 但我想做一些不同的事情 基本上 我们有一个已用作概念证明的存储库 我们希望将其存档 然而 我们想要创建一个新的存储库 其中包含一些代码的最新版本 但保存了作者历史记录 但
  • 使用 ref 并拥有 ProxyComponent 时如何访问实际组件

    我们有一个对 React 组件的引用 并且想要调用该组件的方法 当使用 ref 时 它是一个 ProxyComponent 对象 我如何将它用作我的实际组件 或者如何才能做到这一点 我看到 有属性 renderedElement 并且在属性
  • 如果选择“图像/文件”,Laravel 会验证字段吗?

    我有一个 图像 字段 类型是file并且只需要验证是否选择了图像 这意味着它也可以为空 我试过这样 avatar gt mimes jpeg jpg png gif max 100000 但这也是必需的 我仍然尝试使用参数present a
  • EF 4.3.1 与 VS 2011

    我需要知道是否可以开始在 VS 2011 中使用最新版本的 EF 4 3 1 而无需按照所述安装这些 CTP 组件here http blogs msdn com b adonet archive 2011 06 30 announcing
  • postgis如何处理使用不同SRID发送的坐标

    我正在运行 django 应用程序 并且我正在为我的数据库使用 PostGis 扩展 我试图更好地了解发送坐标时幕后发生的情况 特别是因为我正在使用转换为不同 SRID 的不同坐标系 我的问题有三个 在数据库中创建点或多边形时 django