postgis - st_contains postgis vie postgres 中的问题
问题描述
我是 postgis 的新手,在 postgressql 中使用 st_contains 时遇到问题。我有两个表:一个具有多线串类型和 srid 3857 的表,如下所示:
'MULTILINESTRING((5422968.66785559 3677150.09505449,5422968.65492085 3677150.0886859,5422952.17411073 3677141.94577852,5422933.98180744 3677132.88239635,5422908.89206302 3677120.3831169,5422889.41793598 3677110.66168418,5422860.41342641 3677096.31330017,5422843.29303681 3677087.88278276),(5422968.4135149 3677150.59358815,5422980.01582934 3677156.57635076,5422990.22979481 3677161.61762274,5423006.30129137 3677169.56131558))'
和另一个表点类型和 srid 3857 像这样:
'点(48.6977500915527 31.3106079101563)'
我从 st_buffer 使用多线字符串几何类型的第一个表,并期望从表 2 中找到该缓冲区内的任何点
当我使用 st_contains 不返回任何行时,有什么问题?虽然两个 srid 都是 3857
select ST_X(P.geom) lng , ST_Y(P.geom) lat from public."Zone" A
inner join public."Points" P on ST_Contains(ST_Buffer(A.geom, 100), P.geom)
解决方案
重点不在 3857 中,而是在 4326 中。您需要先将其转换为 3857
select st_asText(st_transform(st_GeomFromText('POINT(48.6977500915527 31.3106079101563)',4326),3857));
st_astext
------------------------------------------
POINT(5421008.74296974 3673153.53251071)
话虽如此,使用st_dwithin
它比使用更可靠st_buffer
。
推荐阅读
- docker - 无法弄清楚我是如何错误配置我的 docker-compose 文件的
- vba - 使用 Vlookup 发送电子邮件以匹配电子邮件地址
- c++ - 如何让 QString 在 QT 中具有特定的大小?
- android - 如何修复 kivy plyer vibrate android test apk 中的“jnius.jnius.JavaException”(使用 buildozer 编译)
- powershell - 快速将 PDF 文档附加(合并)到 50,000 个其他文档中
- python - maya.cmds 对话框结束脚本
- typescript - @types/elasticsearch SearchResponse 类型错误
- reactjs - 使用 redux-form 和 typescript 创建组件的正确形式是什么?
- python - spark grep 工具问题
- javascript - 重构 KnexJS 多个 Promise