【发布时间】:2020-05-07 22:20:34
【问题描述】:
我正在 PostGis 中查看此功能
https://postgis.net/docs/manual-dev/ST_HexagonGrid.html
1) 我不明白底层的几何数据是什么。如图所示,获取美国地图的来源是什么?什么是数据库架构?如果我只需要美国边界而不是每个州,我认为这可能是一个记录?
2) 结果是点列表吗?还是几何向量?
3)如果是geom向量,如何将它们转换为lat和lng的点?
4) 如何将六边形逼近到一个点的半径为 50 英里?
更新:
根据下面的 Jim Jones 示例,我使用宽度来尝试获得正确数量的六边形。不幸的是,出了点问题..
1) 长度似乎与米无关
2) 有多个大小的六边形,看起来很奇怪。
postgis_test=# WITH j AS (
postgis_test(# SELECT ST_Transform((hex).geom,4326) AS hex FROM (
postgis_test(# SELECT
postgis_test(# generate_hexgrid(
postgis_test(# 5909968.8,
postgis_test(# ST_XMin(ST_Extent(ST_Transform(geom,3857))) ,
postgis_test(# ST_YMin(ST_Extent(ST_Transform(geom,3857))) ,
postgis_test(# ST_XMax(ST_Extent(ST_Transform(geom,3857))) ,
postgis_test(# ST_YMax(ST_Extent(ST_Transform(geom,3857))) ) AS hex
postgis_test(# FROM usa_states)i)
postgis_test-# SELECT count(j.hex) FROM j,usa_states
postgis_test-# WHERE ST_Intersects(usa_states.geom,j.hex);
count
-------
119
(1 row)
postgis_test=# WITH j AS (
postgis_test(# SELECT ST_Transform((hex).geom,4326) AS hex FROM (
postgis_test(# SELECT
postgis_test(# generate_hexgrid(
postgis_test(# 5909968.8,
postgis_test(# ST_XMin(ST_Extent(ST_Transform(geom,3857))) ,
postgis_test(# ST_YMin(ST_Extent(ST_Transform(geom,3857))) ,
postgis_test(# ST_XMax(ST_Extent(ST_Transform(geom,3857))) ,
postgis_test(# ST_YMax(ST_Extent(ST_Transform(geom,3857))) ) AS hex
postgis_test(# FROM usa_states)i)
postgis_test-# SELECT DISTINCT st_area(j.hex) FROM j,usa_states
postgis_test-# WHERE ST_Intersects(usa_states.geom,j.hex);
st_area
------------------
1219.78281686003
2089.11341619338
2089.11341619338
3379.93344444246
7051.4650344734
12076.9943663072
(6 rows)
【问题讨论】:
-
前段时间我改编了一个创建六边形的函数来回答这个问题:stackoverflow.com/a/50845811/2275388对你有帮助吗?
-
伟大的项目!如何确保六边形的大小是相等的距离/面积,并且它们可以用作 50 英里半径的代理?
-
也许您可以详细说明一下您的用例并添加到您的问题中。为什么需要六边形?您需要覆盖特定区域的六边形,或者您想在一个点周围创建一个六边形 - 比如缓冲区?
-
我有一个 api,我可以按半径(50 英里)搜索。我想覆盖/查询整个美国,尽可能少地调用 API,所以我试图计算我需要查询的位置。
-
所以你想用同样大小的六边形覆盖整个国家 - 50 英里?
标签: sql postgresql gis postgis