gpt4 book ai didi

php - 在 PHP 中组合 KML 多边形

转载 作者:搜寻专家 更新时间:2023-10-31 21:46:50 24 4
gpt4 key购买 nike

我对 Google Maps API 有疑问,每张 map 只允许 1000 个要素。

在数据库中,我保留了 areas 的记录.每个区域都关联了一堆 KML 多边形信息,存储为 XML 字符串。每个区域由一个或多个多边形组成。

鉴于一些用户输入,这些区域中的少数被合并为一个 <Placemark> .我通过将串联的多边形信息包装在 <MultiGeometry> 中来获得它们的组合几何形状标签。

<Placemark>
<name>My combined area</name>
<MultiGeometry>
<Polygon> (area 1 info) </Polygon>
<Polygon> (area 2 info) </Polygon>
<Polygon> (area 2 info) </Polygon>
<Polygon> (area 3 info) </Polygon>
</MultiGeometry>
</Placemark>

问题是其中许多区域都非常复杂,因此,任何给定的 Placemark 都可能有超过 100 个多边形,这很快就超出了每个文档 1000 个的限制。

现在,考虑到组合区域大部分形成一个单一的连续区域,连续区域内部有很多线和多边形,这些都是毫无用处的。是否可以遍历多边形并将它们合并为一个(或至少更少的)多边形?

最佳答案

存储方式使得这是一个非常难解决的问题。以编程方式合并连续的多边形将是缓慢而复杂的。

与其存储 XML 片段,不如使用 PostGIS 将它们推送到支持 GIS 的数据库(如 PostgreSQL)中.这允许您将形状信息存储为众所周知的二进制 (WKB) 对象而不是 XML 片段,并为您提供一整套 GIS 处理和格式化工具。

一旦你有了格式,这个问题就很容易解决了。例如。假设几何列称为“the_geom”,那么您可以使用如下查询:

SELECT ST_ASKML(ST_Union(the_geom)) AS area_union_askml
FROM areas
WHERE (some_filter_expression)
GROUP BY (optional_group_by_expression)

这只是使用聚合函数 ST_UNION 将匹配的几何图形合并到一个对象中,并将结果列输出为 KML 片段。

如果您需要简化形状,因为 KML 对于 Google map 来说太复杂,您可以添加 ST_Simplify 或 ST_SimplifyPreserveTopology。您还可以使用 ST_NPoints 来计算生成的几何体中的点数,以便您可以检测何时需要简化结果。

关于php - 在 PHP 中组合 KML 多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1558177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com