gpt4 book ai didi

database - 优化包含线串的数据集的最佳方式。有些线在同一坐标处开始和结束

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:07 24 4
gpt4 key购买 nike

设置
我有一个包含线串的表。线串由多个地理点组成。每个点由纬度和经度组成。注意:线串值在数据库中存储为 TEXT。

因此表中的一行可能如下所示:
id: 整数
线串:x1, y2, x2, y2, x3, y3, x4, y4

问题
Google map 一次最多只允许显示 1000 个元素。就我而言,我显示了 850 条线串,将来需要添加更多。

问题
相当多的线串与一个或多个其他线串相连,这意味着它们在同一坐标处开始和/或结束。我想要做的是找到优化数据集的最佳方法,以便将连接在末端的线串合并到数据库表中。当我解析数据库表并为谷歌地图创建显示文件时,这将减少元素总数。

示例
想象一下,在此示例中,alpha (A,B,C) 值表示地理点。未优化的表可能如下所示:

优化前:
id 线串
1个甲乙丙
2 C、D
3 B, A
4 女、后卫、后卫
5G,我
6 H, J


优化后:
1 A、B、C、D
2 前锋,后卫,后卫,J
3克,我


那么优化数据的最佳方式是什么?是否有一种特定的算法效果最好?我有一些解决方案的想法,我将制定并添加这些想法,但它们似乎冗长且令人费解。

我不是 CS 专业的,所以请原谅草率的术语,如果任何地方需要澄清,请告诉我。谢谢!


仅供引用..我正在使用 MySQL 数据库。我没有使用空间扩展。如果您有一个使用空间扩展的非常简单的解决方案,我很乐意听到它。

最佳答案

要意识到的一件事是,如果有多个线串可以连接到给定的线串,选择哪个都无关紧要 - 中线串的最终数量优化表将是相同的。

所以在那种情况下,重复寻找一对可以连接的线串并连接它们直到再也找不到这样一对的简单贪心策略将为您提供最佳表。本质上伪代码是:

while (there exists a pair of linestrings x and y that share an endpoint) {
delete(x)
delete(y)
insert(x . y)
}

这不能在单个 SQL 查询中完成,因为生成的线串 x 有可能。 y 将再次使用。您应该能够使用过程语言(例如 T-SQL)或脚本语言(例如 Perl,使用 DBI 进行数据库访问)编写 while 循环,并使用 SQL SELECT 查询来查找一对或一对列表,并且然后使用 DELETE 和 INSERT 语句处理每个语句。

我建议在您的表中添加两个字段,beginend,并为它们建立索引以加快搜索速度。

关于database - 优化包含线串的数据集的最佳方式。有些线在同一坐标处开始和结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/462640/

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