如何在postgis中创建一个以米为单位的圆?

2023-11-21

我想问一下如何创建一个圆radius=4km。我已经尝试过ST_Buffer功能,但它创造了一个更大的圆圈。 (我通过将其多边形插入新的 kml 文件来查看创建的圆。)

这就是我正在尝试的。

INSERT INTO camera(geom_circle) VALUES(geometry(ST_Buffer(georgaphy(ST_GeomFromText('POINT(21.304116745663165 38.68607570952619)')), 4000)))

圆心是一个经纬度点,但我不知道它SRID因为我是从 kml 文件导入的。 我需要吗SRID为了改变几何形状等?


KML 文件始终为纬度/经度并使用 SRID=4326。如果您使用,则隐含此 SRIDgeography。地理是将 4 公里公制测量值与纬度/经度数据混合在一起的好方法...您尝试过,非常棒!

尝试使用此语句来修复强制转换,并使用参数化点构造函数:

SELECT ST_Buffer(ST_MakePoint(21.304116745663165, 38.68607570952619)::geography, 4000);

如果您需要将其转换回几何体,请添加::geometry投到最后。


准确性更新

前面的答案在内部将几何图形(通常)重新投影到该点适合的 UTM 区域(请参阅ST_缓冲区)。如果该点位于两个 UTM 边界的边缘上,这可能会导致轻微的扭曲。大多数人不会关心这些误差的大小,但它通常会达到几米。但是,如果您需要亚毫米精度,请考虑构建动态方位等距投影。这需要 PostGIS 2.3ST_Transform,并改编自另一个答案:

CREATE OR REPLACE FUNCTION geodesic_buffer(geom geometry, dist double precision,
                                           num_seg_quarter_circle integer)
  RETURNS geometry AS $$
  SELECT ST_Transform(
    ST_Buffer(ST_Point(0, 0), $2, $3),
      ('+proj=aeqd +x_0=0 +y_0=0 +lat_0='
       || ST_Y(ST_Centroid($1))::text || ' +lon_0=' || ST_X(ST_Centroid($1))::text),
      ST_SRID($1))
  $$ LANGUAGE sql IMMUTABLE STRICT COST 100;
CREATE OR REPLACE FUNCTION geodesic_buffer(geom geometry, dist double precision)
  RETURNS geometry AS 'SELECT geodesic_buffer($1, $2, 8)'
  LANGUAGE sql IMMUTABLE STRICT COST 100;
-- Optional warppers for geography type
CREATE OR REPLACE FUNCTION geodesic_buffer(geog geography, dist double precision)
  RETURNS geography AS 'SELECT geodesic_buffer($1::geometry, $2)::geography'
LANGUAGE sql IMMUTABLE STRICT COST 100;
CREATE OR REPLACE FUNCTION geodesic_buffer(geog geography, dist double precision,
                                           num_seg_quarter_circle integer)
  RETURNS geography AS 'SELECT geodesic_buffer($1::geometry, $2, $3)::geography'
  LANGUAGE sql IMMUTABLE STRICT COST 100;

运行其中一个函数的简单示例是:

SELECT geodesic_buffer(ST_MakePoint(21.304116745663165, 38.68607570952619)::geography, 4000);

为了比较到每个缓冲点的距离,这里是每个缓冲点的长度geodesic(旋转椭球上的最短路径,即 WGS84)。首先这个函数:

SELECT count(*), min(buff_dist), avg(buff_dist), max(buff_dist)
FROM (
  SELECT ST_Distance((ST_DumpPoints(geodesic_buffer(poi, dist)::geometry)).geom, poi) AS buff_dist
  FROM (SELECT ST_MakePoint(21.304116745663165, 38.68607570952619)::geography AS poi, 4000 AS dist) AS f
) AS f;

 count |      min       |       avg       |      max
-------+----------------+-----------------+----------------
    33 | 3999.999999953 | 3999.9999999743 | 4000.000000001

将此与 ST_Buffer(答案的第一部分)进行比较,显示它偏离了大约 1.56 m:

SELECT count(*), min(buff_dist), avg(buff_dist), max(buff_dist)
FROM (
  SELECT ST_Distance((ST_DumpPoints(ST_Buffer(poi, dist)::geometry)).geom, poi) AS buff_dist
  FROM (SELECT ST_MakePoint(21.304116745663165, 38.68607570952619)::geography AS poi, 4000 AS dist) AS f
) AS f;

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

如何在postgis中创建一个以米为单位的圆? 的相关文章

  • 如何在iphone中画同心圆?

    我想画一个戒指 环应填充在外圆中 我参考了一个文档http developer apple com library mac documentation GraphicsImaging Conceptual drawingwithquartz
  • 通过非 sf 列内连接两个 sf 对象

    我尝试使用内连接或左连接连接两个 sf 数据帧 这些数据框内部都有几何列 我不断收到错误 check join x y 中的错误 y 应该是一个数据框 对于空间连接 请使用 st joinFALSE 下面的可重现示例 df1 lt data
  • 以一定角度遍历二维数组

    通常我们按行或列遍历数组 但这里我想以角度遍历它 我会尝试解释我的意思 因此 假设角度是 45 度 那么它会搜索为 0 0 then 0 1 1 0 then 0 2 1 1 2 0 等等 抱歉 无法上传图像 因为我是新用户 不允许这样做
  • iOS 绘制圆圈

    我正在尝试在我的 iOS 应用程序中创建下面的圆圈 我知道如何制作圆圈 但不完全确定如何沿着弧线获取点 它必须是代码而不是图像 下面也是我目前拥有的代码 void drawRect CGRect rect CGPoint point poi
  • 如何从一组重叠的圆计算多边形集?

    这个问题是一些计算细节的扩展这个问题 https stackoverflow com questions 1667310 combined area of overlapping circles 假设有一组 可能重叠的 圆 并且希望计算这组
  • 谷歌地图颤动检查点是否在多边形内

    我正在使用 google maps flutter 插件开发 flutter 项目 我想检查用户位置是否位于我在地图上创建的多边形内 有一个简单的方法使用 JavaScript api con tainsLocation 方法 但对于 fl
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • 如何从矩形点计算旋转角度?

    我有4分1 2 3 4闭合一个矩形 这些点按以下方式排列在数组中 x1 y1 x2 y2 x3 y3 x4 y4 我遇到的问题是矩形可以旋转一定角度 如何计算原始点 灰色轮廓 和角度 我试图在 javascript css3 transfo
  • 在 field_name 中指定反向关系时,GeoDjango GeoQuerySet.distance() 会导致“ST_Distance 输出仅在 GeometryFields 上可用”

    从文档和其他问题来看 按距离对 GeoQuerySet 进行排序应该很简单 但我在让它工作时遇到了困难 下面通过一个例子来说明问题的情况 假设我在两个不同的应用程序中获得了两个模型 appA 中的一个模型和 appB 中的另一个模型定义如下
  • 为什么我的圈子值为零?

    这是我的 Circle 类代码 class Circle private double radius private double area public Circle double radius this radius radius pu
  • 查看 TIN 文件的工具

    有没有免费的开源工具可用于查看 TIN 不规则三角形网络 文件 我从 LAS 激光雷达数据 文件获得的 thanks 这在很大程度上取决于格式 大多数从 LIDAR 数据生成的 TIN 都采用标准 GIS 格式之一 在这种情况下 良好的开源
  • 带孔的多边形三角剖分

    我正在寻找一种算法或库 更好 将多边形分解为三角形 我将在 Direct3D 应用程序中使用这些三角形 最好的可用选项是什么 这是我到目前为止发现的 本 迪斯科的笔记 http www vterrain org Implementation
  • 使用 JSTS 缓冲区识别自相交多边形

    我希望能够通过 JSTS 无法构造自相交多边形或通过添加缓冲区并在缓冲后测试它们是否是多重多边形来测试自相交多边形 但对于某种形状 这是行不通的 这远远超出了我的几何能力格罗克 a self intersecting shape var p
  • 哪种算法可以有效地找到路径一定距离内的一组点?

    给定一组点s 一组 x y 坐标 和由连接一组点的线段组成的路径l 描述一种有效的算法 可用于从s在指定距离内d路径的l 其实际应用可能是查找沿城市之间的公路旅行路径 10 英里内任意位置的餐馆列表 For example in the f
  • 从基本矩阵中查找单应矩阵

    我正在尝试计算单应性矩阵H给定一组对应关系和基本矩阵F 根据对极几何原理 我知道这可以通过对极线和对极线的叉积来完成F from 极点几何 http www cs unc edu marc tutorial node44 html e ij
  • 找到经过大多数点的直线的最有效算法是什么?

    问题 N 个点在二维平面上给出 同一个点上最多有多少个点straight line The problem has O N2 solution go through each point and find the number of poi
  • 如何计算某物是否位于某人的视野中

    我有一个对象 它在 2D 空间中具有位置和速度 两者都由向量表示 对象的视野每侧均为 135 度 它看起来与移动的方向相同 速度矢量 我有一些对象 其在 2D 空间中的位置由向量表示 在图中 蓝色背景上的对象是可见的 红色背景上的对象对主体
  • 给定一个点向量(可能无序),找到多边形(不是凸包)

    我目前有一个点向量 vector
  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • 球体表面上(经度、纬度)点的凸包

    标准凸包算法不适用于 经度 纬度 点 因为标准算法假设您需要一组笛卡尔点的包 纬度 经度点是not笛卡尔坐标系 因为经度在反子午线处 环绕 180 度 即 东经 179 度以东 2 度为 179 因此 如果您的点集恰好横跨反子午线 您将错误

随机推荐

  • UIPageViewController 禁用滚动

    我正在使用带有transitionStyle的UIPageViewControllerUIPageViewControllerTransitionStyleScroll和导航方向UIPageViewControllerNavigationO
  • mysql 将某列的默认值设置为当前登录用户

    如何将某列的默认值设置为登录用户 我正在创建一个 日志记录 表 其中一列应该是登录用户 the output of SELECT user 这可能吗 编辑 我尝试过的 create trigger logtrigger test befor
  • 如何在node.js中解压文件

    有一些解压库 但我无法让它们工作 我的想法是这样的 untar bufferStreamOrFilePath extractToDirectory path function err 有这样的东西吗 只是对此答案的更新 而不是node ta
  • 为什么我可以更改 JavaScript 中的常量对象?

    我知道 ES6 还没有标准化 但是目前很多浏览器都支持 constJS 中的关键字 规范中写道 常量的值不能通过重新赋值而改变 并且 不能重新声明常量 正因为如此 虽然是 可以声明一个常量而不初始化它 它是 这样做是没有用的 当我做这样的事
  • HttpWebrequest 中 HTTP 标头的严格排序

    尽管 RFC 声明唯一命名标头的顺序并不重要 但我发送此请求的网站确实对标头的顺序进行了检查 这有效 GET https www thewebsite com HTTP 1 1 Host www thewebsite com Connect
  • ReCaptcha API v2 样式

    我在寻找如何设计 Google 新的验证码 v2 样式方面并没有取得多大成功 最终的目标是使其具有响应能力 但我很难将样式应用于即使是简单的东西 例如宽度 Their API文档除了以下内容之外 似乎没有给出任何关于如何控制样式的细节the
  • 搜索值中包含的 ElasticSearch 字段

    我正在尝试在 ElasticSearch 中运行类似的字段查询 select from products where milk like name 这意味着我正在尝试查找本例中产品名称是 milk 子字符串的所有文档 我该怎么做 我会使用自
  • 在什么情况下如何使用“队列”或“延迟”?他们的设计目的是什么?

    我很困惑 动画的 队列 和 ajax 的延迟吗 有人可以告诉我一些典型的例子吗 你基本上是正确的 延迟对象 可用于处理异步事件 您启动一个操作 然后注册一个回调 该回调将在操作完成时调用 这包括 AJAX 尽管还有很多其他用途 jQuery
  • TypeError:在严格模式 dexie.js 上可能无法访问“调用者”、“被调用者”和“参数”属性

    谁能告诉我当我调用 dexie js 的 count 函数时会发生什么 TypeError caller callee and arguments properties may not be accessed on strict mode
  • 如何在编辑 SASS 文件后在 Chrome 中自动重新加载 css

    我正在尝试在 Chrome canary 中设置映射功能 我按照截图这个答案 主要功能有效 当我检查一个元素时 它会将我指向本地 sass 文件 当我编辑它时 本地文件安全 并且触发 sass watch 但是 即使在开发工具的 常规 选项
  • Flutter 中的控制台消息

    我目前在 Flutter 版本 2 6 0 12 0 pre 406 的主频道中 每次运行应用程序时 我都会在控制台中收到这些奇怪的消息 我只想知道为什么以及它们的含义以及是否可以忽略这些 当我新创建一个应用程序并在不编辑任何内容的情况下运
  • 浏览器对 Angular 材质的支持

    我想在我的下一个项目中使用 Angular Material https material angularjs org 我没有找到任何有关它支持哪些浏览器的文档 有人知道它的内部运作方式以及预期结果吗 据我了解flexcss 属性 例如 I
  • 如何通过迁移手动创建 asp.net 身份表?

    我希望 asp net Identity 表存在于我的数据库中 并且在实际运行 mvc 应用程序并创建用户之前生成相应的代码优先模型 以便我可以针对这些类编写一些逻辑之前 有没有办法可以手动创建这些表 类并进行迁移 如果您想将其手动添加到数
  • Objective c ios中的^是什么意思? [复制]

    这个问题在这里已经有答案了 很抱歉问这么简单的问题 但这些东西很难用谷歌搜索 我在 iOS 中有代码连接到在摄氏温度和华氏温度之间切换的切换开关 但我不知道 1 是什么意思 self celsius 是布尔值 Thanks self cel
  • cgi.FieldStorage如何存储文件?

    所以我一直在尝试原始 WSGI cgi FieldStorage 和文件上传 我只是不明白它如何处理文件上传 起初 它似乎只是将整个文件存储在内存中 我想嗯 这应该很容易测试 大文件应该会堵塞内存 但事实并非如此 不过 当我请求文件时 它是
  • 如何配置 WebStorm 为 KoaJS 提供代码补全?

    目前 WebStorm 报告 KoaJS 的方法未定义 这是一个轻微但持续的烦恼 我在网上搜索过 也搜索过WebStorm的配置对话框 但没有结果 有人将 WebStorm 与 KoaJS 一起使用并且智能感知 代码完成正常工作吗 这是一个
  • 我们如何使用 TriggerDagRunOperator 触发多个气流 dag?

    我有一个场景 其中特定的 dag 完成后需要触发多个 dag 已使用 TriggerDagRunOperator 触发单个 dag 是否可以将多个 dag 传递给 TriggerDagRunOperator 来触发多个 dags 是否可以仅
  • C++ 可变参数模板 AND 和 OR

    可以使用C 11可变参数模板来完成吗 in template
  • 修改jar文件

    我有一个 jar 文件 在 html 文件中用作小程序 我想修改 jar 文件的内容并重建 jar 文件 以便 html 可以与新的 jar 文件一起正常工作 我怎样才能做到这一点 我已经尝试使用 7zip 解压缩 并修改了源代码并创建了新
  • 如何在postgis中创建一个以米为单位的圆?

    我想问一下如何创建一个圆radius 4km 我已经尝试过ST Buffer功能 但它创造了一个更大的圆圈 我通过将其多边形插入新的 kml 文件来查看创建的圆 这就是我正在尝试的 INSERT INTO camera geom circl