当前位置: 首页 > 知识库问答 >
问题:

相当于PostGIS在完美球体上的ST_Project

段超
2023-03-14

我有一个PostGIS地理点,我想在理想球体(不是球体)上旋转一个设定的距离。我看到ST_Project()函数,但它似乎在旋转球体上的点。例如,如果我向北旋转(0,10)1度,结果略大于1度

select ST_AsText(ST_Project(ST_Point(0,10), 111194.68229846345*1,radians(0.0)));

   st_astext         
---------------------------
 POINT(0 11.0052750273178)
(1 row)

旋转(0,60)相同的距离给出的结果略小于1度。

POINT(0 60.9979713953998)

我也可以用球体计算点之间的距离

select ST_Distance(ST_Project(ST_Point(60,89.9)::geography, 111194.68229846345*1,radians(0.0)),ST_Point(60,89.9),'t');
    st_distance    
------------------
 111194.682298475
(1 row)

还有完美的球体

select ST_Distance(ST_Project(ST_Point(60,89.9)::geography, 111194.68229846345*1,radians(0.0)),ST_Point(60,89.9),'f');
   st_distance   
-----------------
 110698.09475313
(1 row)

所以这并不是因为我把地球的周长搞错了。

一般来说,我的方位角将是0,90,180和270之一,它必须在极点周围正常工作。

共有1个答案

暴向笛
2023-03-14

您只需要创建一个新的空间投影,其中球体的半主轴和半次轴是相同的。所以对于半径为6370986 m的球体,这里有一个新的SRID=123456:

INSERT INTO spatial_ref_sys(srid, auth_name, srtext, proj4text)
VALUES (123456, NULL, '', '+proj=longlat +a=6370986 +b=6370986 +ellps=sphere +no_defs ');

对于地理类型,WGS84椭球体的默认SRID=4326。要使用新的球体椭球,您需要将SRID设置为非默认值。

SELECT ST_AsText(ST_Project(ST_SetSRID(ST_Point(0,10), 123456), 111194.68229846345, 0.0));

  st_astext
-------------
 POINT(0 11)
(1 row)
 类似资料:
  • 有了这个功能,我可以在Android系统的OpenGL ES 1.0中创建一个球体: 我现在的问题是,我想在球体上使用这个纹理,但是只创建了一个黑色的球(当然,因为右上角是黑色的)。我使用这个纹理坐标是因为我想使用整个纹理: 要正确使用纹理,我需要做什么?

  • 我正在使用JavaFx,我正在寻找一种与AWT BufferedImage等价的工具。我发现我可以使用SwingFXUtils来使用JavaFx的awt BuffereImage,但我不想使用awt。 事实上,我正在寻找一种结构来显示与颜色模型关联的像素表。 有人知道JavaFx的一些等价物吗? 非常感谢。

  • 问题内容: 我已经使用JPA(实现hibernate)一段时间了,每次我需要创建实体时,我都会遇到与AccessType,不可变属性,equals / hashCode等有关的问题。 因此,我决定尝试找出每个问题的最佳常规做法,并写下来供个人使用。 但是,我不介意让任何人对此发表评论或告诉我我错了。 实体类 实现可序列化 原因: 规范要求您必须这样做,但是某些JPA提供程序没有强制执行此操作。 作

  • 问题内容: 我需要一种算法,该算法可以使我在球体上的位置保持N个点(可能少于20个),并将其模糊地散布开来。不需要“完美”,但是我只需要它,所以它们都不会聚在一起。 这个问题]提供了很好的代码,但是我找不到使这种统一的方法,因为这似乎是100%随机的。 推荐的这篇博客文章有两种方法可以输入球体上的点数,但是Saff和Kuijlaars算法恰好是我可以转录的伪代码,而我发现的代码示例包含“ node

  • 问题内容: 我的任务是为开源JAVA应用程序编写身份验证组件。我们有一个使用的内部身份验证窗口小部件。我有一些例子访问的代码,它使用来办理过户。 我的问题是,是否有 的端口,或者更好的是,什么基本软件包将使我足够接近以处理任务? 更新: 简而言之,我想在JAVA中复制的代码: 希思,我认为你的目标是正确的,我认为我最终将使用HttpsURLConnection,然后从响应中选择所需的内容。 问题答

  • 问题内容: 我知道(其中e是一个异常)会打印发生的异常,但是,我试图找到与Java等效的python,它可以将异常确切地跟踪到发生的那一行,并打印出整个轨迹。 谁能告诉我Python 的等效功能吗? 问题答案: 在块内执行此操作时,它将自动使用当前异常。有关更多信息,请参见http://docs.python.org/library/traceback.html。