postgresql - 搜索一个点存在于哪个多边形行上?
问题描述
我在几何列上插入了多个带有 geojson 值的位置行,并尝试根据点值搜索它,我需要找到该点是否存在于多边形上?我看过这个https://stackoverflow.com/a/38941705/1138192但我有 geojson 值可以按点插入和搜索。
到目前为止我所尝试的:
CREATE TABLE areas (
id SERIAL PRIMARY KEY,
name VARCHAR(64),
the_geom GEOMETRY
);
CREATE INDEX areas_the_geom_idx ON areas USING GIST (the_geom);
INSERT INTO areas (name, the_geom)
VALUES ('Corrected_Shape',
ST_TRANSFORM(ST_GeomFromGeoJSON('{
"type":"Polygon",
"coordinates":[[
[-91.23046875,45.460130637921],
[-79.8046875,49.837982453085],
[-69.08203125,43.452918893555],
[-88.2421875,32.694865977875],
[-91.23046875,45.460130637921]
]],
"crs":{"type":"name","properties":{"name":"EPSG:4326"}}
}'),3857));
SELECT name FROM areas WHERE ST_Contains(the_geom, ST_GeomFromText('POINT(43.452918 -69.082031)'));
解决方案
首先,您似乎在创建点时交换了经度和纬度(应该是经度)
-->ST_GeomFromText('POINT(-69.082031 43.452918)')
然后,您将多边形几何投影到 3857 但不是点。您必须对两个几何图形使用相同的 CRS。
-->ST_TRANSFORM(ST_GeomFromText('POINT(-69.082031 43.452918)'),3857)
推荐阅读
- appium - Appium可以切换wifi网络吗?
- c++-winrt - C++/WinRT 是否提供帮助函数来从字符串文字构造 GUID?
- php - 在 MySQL 插入上使用 multipart/form-data 的奇怪行为
- ios - UINavigationController - 如何更改单个 UIViewController 的动画
- web-scraping - 下载整个网页并将它们保存为带有 urllib.request 的 html 文件
- shell - 在 pig 中执行 shell 命令时出错
- php - 我想在 wordpress WooCommerce 中显示价格和添加到购物车之间的产品附加信息
- go - 用于 C/C++ 绑定的 Golang 对象析构函数
- python - 使用 utf 8 导出 Python 中非英语字符的文件?
- amazon-web-services - 突变以在 AWS AppSync 上创建关系