PostGIS 中的缓冲区(圆形)

2023-12-08

我必须扩展普通的 GeoJSON 格式以添加一些不受支持的多边形,例如圆。

{
 "type": "Circle",
 "radius" : 0.001,
 "coordinates": [
        5.417075157165527,
       43.29129488122568
 ]
}

这是一个例子。坐标标记圆心,半径标记半径(以米为单位)。

在 PostGis Docs 和 Stackoverflow 上搜索,要绘制一个圆圈,您必须使用 ST_BUFFER。

所以我使用:

ST_Buffer(ST_GeomFromGeoJSON(<center of circle>),0.001, 'quad_segs=16')

你知道吗,这只能在 0,0(非洲附近)绘制一个圆。其他位置添加扭曲,改变椭圆形的形状。

我用的是4326。

我尝试过搜索(即使在这里),但我找不到简单地画一个圆以避免投影或变换它的解决方案。

这里唯一的帖子是:如何在postgis中创建一个以米为单位的圆?但它很旧,该解决方案不起作用。


不就是做应该做的事吗?哪个是为了补偿由于将椭球体投影到二维平面结构而产生的畸变?我相信,离赤道越远,椭圆形缓冲器你会看见。

例子:

db=# SELECT ST_AsText(
     ST_Buffer(
        ST_GeomFromText('SRID=4326;POINT(43.29 5.41)'),0.001, 'quad_segs=16')
    );

此查询返回埃塞俄比亚东南部的一个圆:

POLYGON((43.291 5.41,43.2909951847267
5.40990198285967,43.2909807852804 5.40980490967798,43.2909569403357 5.40970971532275,43.2909238795325 5.40961731656764,43.2908819212644 5.40952860326317,43.2908314696123 5.40944442976698,43.2907730104534 5.40936560671584,43.2907071067812 5.40929289321881,43.2906343932842 5.40922698954664,43.290555570233 5.4091685303877,43.2904713967368 5.40911807873565,43.2903826834324 5.40907612046749,43.2902902846773 5.40904305966427,43.290195090322 5.4090192147196,43.2900980171403 5.40900481527333,43.29 5.409,43.2899019828597 5.40900481527333,43.289804909678 5.4090192147196,43.2897097153227 5.40904305966427,43.2896173165676 5.40907612046749,43.2895286032632 5.40911807873565,43.289444429767 5.4091685303877,43.2893656067158 5.40922698954664,43.2892928932188 5.40929289321881,43.2892269895466 5.40936560671584,43.2891685303877 5.40944442976698,43.2891180787356 5.40952860326317,43.2890761204675 5.40961731656764,43.2890430596643 5.40970971532275,43.2890192147196 5.40980490967798,43.2890048152733 5.40990198285967,43.289 5.41,43.2890048152733 5.41009801714033,43.2890192147196 5.41019509032202,43.2890430596643 5.41029028467725,43.2890761204675 5.41038268343237,43.2891180787356 5.41047139673683,43.2891685303877 5.41055557023302,43.2892269895466 5.41063439328416,43.2892928932188 5.41070710678119,43.2893656067158 5.41077301045336,43.289444429767 5.4108314696123,43.2895286032632 5.41088192126435,43.2896173165676 5.41092387953251,43.2897097153227 5.41095694033573,43.289804909678 5.4109807852804,43.2899019828597 5.41099518472667,43.29 5.411,43.2900980171403 5.41099518472667,43.290195090322 5.4109807852804,43.2902902846773 5.41095694033573,43.2903826834324 5.41092387953251,43.2904713967368 5.41088192126435,43.290555570233 5.4108314696123,43.2906343932842 5.41077301045336,43.2907071067812 5.41070710678119,43.2907730104534 5.41063439328416,43.2908314696123 5.41055557023302,43.2908819212644 5.41047139673683,43.2909238795325 5.41038268343237,43.2909569403357 5.41029028467725,43.2909807852804 5.41019509032202,43.2909951847267 5.41009801714033,43.291 5.41))

enter image description here

在距离赤道稍远一点的突尼斯进行同样的程序POINT(9.76 36.61):

POLYGON((9.761 36.61,9.76099518472667 36.6099019828597,9.7609807852804 36.609804909678,9.76095694033573 36.6097097153227,9.76092387953251 36.6096173165676,9.76088192126435 36.6095286032632,9.7608314696123 36.609444429767,9.76077301045336 36.6093656067158,9.76070710678119 36.6092928932188,9.76063439328416 36.6092269895466,9.76055557023302 36.6091685303877,9.76047139673683 36.6091180787356,9.76038268343236 36.6090761204675,9.76029028467725 36.6090430596643,9.76019509032202 36.6090192147196,9.76009801714033 36.6090048152733,9.76 36.609,9.75990198285967 36.6090048152733,9.75980490967798 36.6090192147196,9.75970971532275 36.6090430596643,9.75961731656763 36.6090761204675,9.75952860326317 36.6091180787356,9.75944442976698 36.6091685303877,9.75936560671584 36.6092269895466,9.75929289321881 36.6092928932188,9.75922698954664 36.6093656067158,9.7591685303877 36.609444429767,9.75911807873565 36.6095286032632,9.75907612046749 36.6096173165676,9.75904305966427 36.6097097153227,9.7590192147196 36.609804909678,9.75900481527333 36.6099019828597,9.759 36.61,9.75900481527333 36.6100980171403,9.7590192147196 36.610195090322,9.75904305966427 36.6102902846773,9.75907612046749 36.6103826834324,9.75911807873565 36.6104713967368,9.7591685303877 36.610555570233,9.75922698954664 36.6106343932842,9.75929289321881 36.6107071067812,9.75936560671584 36.6107730104534,9.75944442976698 36.6108314696123,9.75952860326317 36.6108819212644,9.75961731656763 36.6109238795325,9.75970971532275 36.6109569403357,9.75980490967798 36.6109807852804,9.75990198285967 36.6109951847267,9.76 36.611,9.76009801714033 36.6109951847267,9.76019509032202 36.6109807852804,9.76029028467725 36.6109569403357,9.76038268343236 36.6109238795325,9.76047139673683 36.6108819212644,9.76055557023302 36.6108314696123,9.76063439328416 36.6107730104534,9.76070710678119 36.6107071067812,9.76077301045336 36.6106343932842,9.7608314696123 36.610555570233,9.76088192126435 36.6104713967368,9.76092387953251 36.6103826834324,9.76095694033573 36.6102902846773,9.7609807852804 36.610195090322,9.76099518472667 36.6100980171403,9.761 36.61))

enter image description here

而这个距离更远,在挪威北部POINT(23.20 69.94):

POLYGON((23.201 69.94,23.2009951847267 69.9399019828597,23.2009807852804 69.939804909678,23.2009569403357 69.9397097153227,23.2009238795325 69.9396173165676,23.2008819212643 69.9395286032632,23.2008314696123 69.939444429767,23.2007730104534 69.9393656067158,23.2007071067812 69.9392928932188,23.2006343932842 69.9392269895466,23.200555570233 69.9391685303877,23.2004713967368 69.9391180787356,23.2003826834324 69.9390761204675,23.2002902846773 69.9390430596643,23.200195090322 69.9390192147196,23.2000980171403 69.9390048152733,23.2 69.939,23.1999019828597 69.9390048152733,23.199804909678 69.9390192147196,23.1997097153227 69.9390430596643,23.1996173165676 69.9390761204675,23.1995286032632 69.9391180787356,23.199444429767 69.9391685303877,23.1993656067158 69.9392269895466,23.1992928932188 69.9392928932188,23.1992269895466 69.9393656067158,23.1991685303877 69.939444429767,23.1991180787357 69.9395286032632,23.1990761204675 69.9396173165676,23.1990430596643 69.9397097153227,23.1990192147196 69.939804909678,23.1990048152733 69.9399019828597,23.199 69.94,23.1990048152733 69.9400980171403,23.1990192147196 69.940195090322,23.1990430596643 69.9402902846772,23.1990761204675 69.9403826834324,23.1991180787357 69.9404713967368,23.1991685303877 69.940555570233,23.1992269895466 69.9406343932842,23.1992928932188 69.9407071067812,23.1993656067158 69.9407730104534,23.199444429767 69.9408314696123,23.1995286032632 69.9408819212643,23.1996173165676 69.9409238795325,23.1997097153227 69.9409569403357,23.199804909678 69.9409807852804,23.1999019828597 69.9409951847267,23.2 69.941,23.2000980171403 69.9409951847267,23.200195090322 69.9409807852804,23.2002902846773 69.9409569403357,23.2003826834324 69.9409238795325,23.2004713967368 69.9408819212643,23.200555570233 69.9408314696123,23.2006343932842 69.9407730104534,23.2007071067812 69.9407071067812,23.2007730104534 69.9406343932842,23.2008314696123 69.940555570233,23.2008819212643 69.9404713967368,23.2009238795325 69.9403826834324,23.2009569403357 69.9402902846772,23.2009807852804 69.940195090322,23.2009951847267 69.9400980171403,23.201 69.94))

enter image description here

为了让你的缓冲区忽略失真由投影引起的,考虑以下查询(POINT在意大利):

SELECT 
  ST_Buffer(
    ST_GeomFromGeoJSON('{"type":"Point","coordinates":[11.26,44.42]}')::geography,
1000,'quad_segs=16')::geometry;

enter image description here

解释:

计算使用GEOMETRY and GEOGRAPHY制作方法不同,结果也不同。GEOGRAPHY计算球面上的坐标(这可能比GEOMETRY)和用途meters作为测量单位,同时GEOMETRY使用平面投影并使用 SRS 单位。

Note: The GEOMETRY对于 OP 的用例来说,在最后一个查询的末尾进行转换是必要的,请参阅下面的注释。

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

PostGIS 中的缓冲区(圆形) 的相关文章

随机推荐

  • 嵌套对象的默认值

    假设我有以下提供默认值的对象 default values a 0 b 0 c aa 0 bb 0 我还有另一个对象可以覆盖其中一些默认值 override values a 5 c aa 5 我想要的是将这两个对象结合起来 从而产生 co
  • 使用 C# 通过 Skype 进行通话

    我想开发一个盲人辅助软件 比如Jarvis 它是一个 C 表单应用程序 我需要将我的 C 项目与 Skype API 连接起来 以便使用 Skype 调用某个用户名 当我使用命令时Call John 它通过 Skype 呼叫 John 进行
  • 在 NodeJS 协议中实现 STARTTLS

    我正在尝试将 STARTTLS 升级添加到现有协议 当前以纯文本形式运行 首先 我使用一个简单的基于行的回显服务器 这是一个可怕的组装 没有错误处理或将数据包处理成行 但它通常只是在控制台一次发送一行到标准输入时工作 我认为我的服务器是正确
  • Haskell - Aeson:尝试解码 JSON URL Req 时得到“Nothing”

    我对 Haskell 比较陌生 现在我正在尝试更深入地了解并尝试习惯不同的流行库 现在我正在尝试 aeson 我想要做的是解析来自的 MSFT 报价请求 这就是它的样子 Global Quote 01 symbol MSFT 02 open
  • 如何通过ajax验证两个密码字段?

    我正在尝试使用 JSF 验证两个密码字段 但到目前为止还不好 我在 google 上搜索它 但一切都是关于 JSF 1 2 并且非常混乱 我正在使用 JSF 2 0 这就是我到目前为止正在做的事情
  • 如何编写 VBScript 在给定文件夹中启动快捷方式?

    Set oWS WScript CreateObject WScript Shell sLinkFile USERPROFILE Desktop TTS lnk Set oLink oWS CreateShortcut sLinkFile
  • JSTL 格式标签

    尝试在输入文本字段内填充日期值并设置其格式 我在这里做错了什么
  • Material UI 是否已经支持 CSS 容器查询?

    https developer mozilla org en US docs Web CSS CSS Container Queries Container queries for CSS都是最近的 是MUI 5 0已经能够使用它们了吗 不
  • 在 flutter webview 上访问相机

    我有网页显示用户摄像头 如何在 flutter webview 上访问摄像头 我尝试用这个 URL 来做到这一点 https webrtc github io samples src content getusermedia gum 但返回
  • 添加一个将在页面上 echo 到 uniqid 旁边的变量

    我有这个代码
  • Visual Studio 2010:缺少 dll

    我用谷歌搜索了一整天 我快疯了 好吧 这就是我的问题 我已经编写了我的 vs 项目 我已经指定了所有 包含 通过选择项目属性 gt 配置属性 gt VC 目录 和所有外部库目录 以相同的方式 然后 我通过选择项目属性 gt 链接器 gt 输
  • 如何在不影响 Pyqt5 中的小部件的情况下向主窗口添加背景图像

    我想在主窗口中添加背景图像 而不更改其中按钮的背景图像 并且还需要保持纵横比 我尝试过 self centralWidget setStyleSheet background image url The Project logo png b
  • 将 \u200e 解码为字符串

    在 Python3 中 我收到以下错误消息 ValueError time data u200e07 30 200702 38 PM does not match format m d Y I M p from datetime impor
  • 静态类与单例类

    我知道这个话题已经被讨论了一遍又一遍 但我仍然有一个疑问 我希望有人可以帮助我或指导我找到一篇关于 SO 的现有帖子 在传统的C语言中 静态变量存储在数据段中 局部变量存储在堆栈中 我认为与局部变量相比 静态变量的存储和维护成本更高 正确的
  • 如何从标准化数组中获取原始数据

    下面给出了一段简单的代码 它按行规范化数组 import numpy as np from sklearn import preprocessing X np asarray 1 2 1 4 1 2 dtype np float X nor
  • 制作自定义 django 视图装饰器(带参数)时遇到问题

    因此 我阅读了所有类似的问题并复制了他们写的内容 但我仍然遇到问题 所以我想要这样的东西 Yes I know django has one but I want to make my own rate limit seconds 10 m
  • Excel Jet OLE DB:插入日期时间值

    OLEDB 可用于读取和写入 Excel 工作表 考虑以下代码示例 using OleDbConnection conn new OleDbConnection Provider Microsoft Jet OLEDB 4 0 Data S
  • 禁用 Laravel 中的日志记录?

    是否有任何全局配置选项来禁用所有日志记录 我的意思不仅仅是禁用错误记录 我的意思是在调用 Log 时实际上禁用写入文件 如果您不想写入日志文件 您可以简单地注释掉文件中的以下行start global php Log useFiles st
  • 如何在java中使用LinkedHashMap从sql server数据库填充下拉列表

    在 SQL Server 数据库中 我有一个表 其中包含三列 即 Ref Name Ref from 和 Ref to 现在我想要一个下拉列表来按行保存值 即该行的所有列值应按以下方式位于下拉列表中 参考 1 2014 10 10 07 1
  • PostGIS 中的缓冲区(圆形)

    我必须扩展普通的 GeoJSON 格式以添加一些不受支持的多边形 例如圆 type Circle radius 0 001 coordinates 5 417075157165527 43 29129488122568 这是一个例子 坐标标