当我在地理专栏中使用st_dwithin和GIST索引时,解释计划显示索引扫描上的缩小条件变为
解释计划中没有索引的条件为
st_dwithin(
geog,
'010100002010A4000000000000006066400000000000000000'::geography,
'3'::double precision,
false
)
但解释计划表示,当列有GIST索引时,将其更改为以下内容
geog && _st_expand(
'010100002010A4000000000000006066400000000000000000'::geography,
'3'::double precision
)
地理列有一个自定义的空间参照系,在转换为
设置代码如下所示
-- Insert the custom spatial reference system into the db.
insert into spatial_ref_sys values (42000, 'customsrs', 1,
'GEOGCS[
"Normal Sphere (r=57.2957795)",
DATUM["unknown",
SPHEROID["Sphere",57.29577951308232087679,0]
],
PRIMEM["Greenwich",0],
CS[ellipsoidal,2],
AXIS["latitude",north],
AXIS["longitude",east],
UNIT["degree",0.0174532925199433]
]', '+proj=longlat +ellps=sphere +R=57.29577951308232087679 +no_defs');
-- Create a new table with a geography column in the new spatial reference system.
CREATE TABLE geographytest(gid serial PRIMARY KEY, geog geography(POINT, 42000));
-- Insert some data around the dateline
insert into geographytest (gid, geog) values
(1, 'srid=42000;POINT(179 0)'),
(2, 'srid=42000;POINT(178 0)'),
(3, 'srid=42000;POINT(-179 0)'),
(4, 'srid=42000;POINT(-179 90)'),
(5, 'srid=42000;POINT(0 0)');
-- Select all points within a distance of 3 from POINT(179 0).
-- The expected 3 points are returned, with st_distances of 0, 1 and 2.
select
gid,
st_distance(
geog,
'srid=42000;POINT(179 0)',
false
),
st_dwithin(
geog,
'srid=42000;POINT(179 0)',
3,
false
)
from
geographytest
where
st_dwithin(
geog,
st_geogfromtext('srid=42000;POINT(179 0)'),
3,
false
);
-- Create a GIST index on our geography column
CREATE INDEX geographytestindex ON geographytest USING gist (geog);
VACUUM analyze geographytest (geog);
-- Now select again using the same query.
-- Now only one result is returned, the row that has POINT(179 0).
-- The explain plan indicates that the index scan is using
-- Index Cond: (geog && _st_expand('010100002010A4000000000000006066400000000000000000'::geography, '3'::double precision))
-- when performing the select.
select
gid,
st_distance(
geog,
'srid=42000;POINT(179 0)',
false
),
st_dwithin(
geog,
'srid=42000;POINT(179 0)',
3,
false
)
from
geographytest
where
st_dwithin(
geog,
st_geogfromtext('srid=42000;POINT(179 0)'),
3,
false
);
将st_dwithin距离从3增加到230000将返回所有三个预期行,因为在srid 4326中这是它们的距离。
当列上存在索引时,如何让PostGIS在查询中使用我的自定义空间参照系?
问题在于\u st\u expand
。此函数用于展开给定地理区域的边界框。查看代码,我们可以看到所需的距离是使用WGS84半径修改的,因此自定义CRS确实被忽略。如果愿意,您可以报告错误。
/* Read our distance value and normalize to unit-sphere. */
distance = PG_GETARG_FLOAT8(1);
/* Magic 1% expansion is to bridge difference between potential */
/* spheroidal input distance and fact that expanded box filter is */
/* calculated on sphere */
unit_distance = 1.01 * distance / WGS84_RADIUS;
以下操作正在控制台中尝试,用于启用postgis的铁路4.2应用程序。 lat和lon定义为十进制值。这转化为以下查询 与错误: 我认为我需要为这些值声明数据类型(几何或地理),但不确定如何声明。我还想知道ST_DWithin函数是否可以处理3857数据类型,即使文档中没有说明。 注意@target对象还具有一个属性,该属性在postgresql中定义为一个带有:srid的空间值= 最新消息 返回
我有几个关于PostGIS中几何和地理的问题。 我目前正在使用PostGIS和PostgreSQL。 我的大部分空间数据来自韩国,基本上是经纬度。 为了进行测试,我创建了两个具有相同经纬度数据但数据类型不同的表,一个是使用SRID4326的地理表,另一个是使用SRID5186的几何表。 您可以在以下链接https://EPSG.io/5186上找到EPSG5186的更多详细信息 以下是我得到的一系
在我的PostgreSQL 12.2 PostGIS 2.5.4中,我有一个名为Address的表,其列类型为 我正在使用Hibernate Sspace al并尝试开发一个属性转换器,以从我的Sspace al位置对象创建预期的Point对象。 空间位置基本上具有坐标信息: 这是我制作的PointFactory组件: 这是PointConverter: 下面是如何在Address类上设置属性:
最近,我浏览了一些网站,将中缀转换成前缀符号,最后我被卷了起来。 我已经给出了我所做的步骤。。 例:-(1(2*3))(5*6)(7/8) 方法1:-(无需任何算法的手动转换):- 方法2:- 根据现场情况http://scanftree.com/Data_Structure/infix-to-prefix 所以,在这里我完全被绞死了。 请任何人提供以下方面的信息:- 关于我在以上2种方法中哪里出
问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转
我们正在获取具有以下字段的订单数据(仅显示相关字段) 具有NULLoriginal_orderid的订单可以被认为是父订单 其中一些父母订单可能有子订单,子订单的original_orderid映射到父母的订单。 子顺序可以产生另一个子顺序,如图像所示,带有颜色编码。 与原始文本相同的数据: 作为转换,我们需要将所有子节点映射到它们的原始父节点(original_orderid为NULL),并获得