大型数据库表上的最近邻搜索 - SQL 和/或 ArcGis
很抱歉发布了一些可能显而易见的内容,但我没有太多的数据库经验。任何帮助将不胜感激 - 但请记住,我是初学者:-)
我有一张这样的桌子:
表.水果
ID 类型 X 坐标 Y 坐标 味道 果味
1 苹果 3 3 好 1,5
2 橙色 5 4 坏 2,9
3 苹果 7 77 中号 1,4
4 香蕉 4 69 坏 9,5
5 梨形 9 15 中等 0,1
6 苹果 3 38 好 -5,8
7 苹果 1 4 好 3
8 香蕉 15 99 坏 6,8
9 梨 298 18789 中等 10,01
……………………
1000 苹果 1344 1388 坏 5
……………………
1958 香蕉 759 1239 好 1
1959 香蕉 3 4 中等 5,2
我需要: 一个表格,给出了
与原始表格中每个点最接近的 n 个(例如:n=5)点,包括距离 表.5 最近的(请注意,距离是假的)。所以结果表有 ID1、ID2 以及 ID1 和 ID2 之间的距离(不幸的是,还不能发布图像)。
ID.Fruit1 ID.Fruit2 距离 1 1959 1 1 7 2 1 2 2 1 5 30 1 14 50 2 1959 1 2 1 2 ………… 1000 1958 400 1000 xxx xxx … … …
我怎样才能做到这一点(最好使用 SQL/数据库管理)或在 ArcGis 或类似工具中?有什么想法吗? 不幸的是,我的表包含 15000 个数据集,因此如果我选择 n=5,结果表将包含 75000 个数据集。 非常感谢任何建议。
编辑:
非常感谢您迄今为止的评论和建议。让我稍微扩展一下: 第一个提出的方法是对整个表进行强力扫描,呈现巨大的文件大小,或者可能崩溃,对吗? 现在,水果只是一个虚拟的,真实的表包含一个固定 ID、标称属性(“水果类型”等)、X 和 Y 空间列(在 Gauss-Krueger 中)和一些数字属性。 现在,我想有一种方法可以将“边界框”编码到其中,因此距离计算是针对我所讨论的点(假设为 1)以及具有一定边长的正方形内的每个其他点完成的。我可以想象(远程)编码或查询,但是如何让脚本对 ID 列中的每个点执行此操作。按照我的理解,这应该为“Table.Fruit”中的每个记录/点创建一个“子表”,其中包含记录/点周围的正方形内的所有点,并添加距离字段 - 或者,一个大的新表( “表5最近的”)。我希望这有一定道理。有什么想法吗?再次感谢
Sorry for posting something that's probably obvious, but I don't have much database experience. Any help would be greatly appreciated - but remember, I'm a beginner :-)
I have a table like this:
Table.fruit
ID type Xcoordinate Ycoordinate Taste Fruitiness
1 Apple 3 3 Good 1,5
2 Orange 5 4 Bad 2,9
3 Apple 7 77 Medium 1,4
4 Banana 4 69 Bad 9,5
5 Pear 9 15 Medium 0,1
6 Apple 3 38 Good -5,8
7 Apple 1 4 Good 3
8 Banana 15 99 Bad 6,8
9 Pear 298 18789 Medium 10,01
… … … … … …
1000 Apple 1344 1388 Bad 5
… … … … … …
1958 Banana 759 1239 Good 1
1959 Banana 3 4 Medium 5,2
I need:
A table that gives me
The n (eg.: n=5) closest points to EACH point in the original table, including distance
Table.5nearest (please note that the distances are fake). So the resulting table has ID1, ID2 and distance between ID1 and ID2 (can't post images yet, unfortunately).
ID.Fruit1 ID.Fruit2 Distance
1 1959 1
1 7 2
1 2 2
1 5 30
1 14 50
2 1959 1
2 1 2
… … …
1000 1958 400
1000 Xxx Xxx
… … …
How can I do this (ideally with SQL/database management) or in ArcGis or similar? Any ideas?
Unfortunately, my table contains 15000 datasets, so the resulting table will have 75000 datasets if I choose n=5.
Any suggestions GREATLY appreciated.
EDIT:
Thank you very much for your comments and suggestions so far. Let me expand on it a little:
The first proposed method is sort of a brute-force scan of the whole table rendering huge filesizes or, likely, crashes, correct?
Now, the fruit is just a dummy, the real table contains a fix ID, nominal attributes ("fruit types" etc), X and Y spatial columns (in Gauss-Krueger) and some numeric attributes.
Now, I guess there is a way to code a "bounding box" into this, so the distances calculation is done for my point in question (let's say 1) and every other point within a square with a certain edge length. I can imagine (remotely) coding or querying for that, but how do I get the script to do that for EVERY point in my ID column. The way I understand it, this should either create a "subtable" for each record/point in my "Table.Fruit" containing all points within the square around the record/point with a distance field added - or, one big new table ("Table.5nearest"). I hope this makes some kind of sense. Any ideas? THanks again
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
获取所有水果之间的所有距离相当简单。在 Access SQL 中(尽管您可能需要在各处添加括号才能使其正常工作:P):
我不知道 Access 是否具有必要的复杂性来将其限制为每种水果的“前 n”条记录;因此,此查询在您的记录集上将返回 2.25 亿条记录(或者更有可能的是,在尝试时崩溃)!
To get all the distances between all fruit is fairly straightforward. In Access SQL (although you may need to add parentheses everywhere to get it to work :P):
I don't know if Access has the necessary sophistication to limit this to the "top n" records for each fruit; so this query, on your recordset, will return 225 million records (or, more likely, crash while trying)!
感谢您迄今为止的评论;与此同时,我采用了一个预制的解决方案,一个名为 霍斯的工具。这确实可以轻而易举地找到具有 x 和 y 值的任何点要素的 n 个最近邻居。所以我希望它可以帮助有类似问题和疑问的人。
然而,它现在给我留下了一个更多与数据库相关的问题。您知道如何获得任何 DBMS(最好是 Access)来为我提供所有组合的列表吗?也就是说,如果我有一个点特征,在空间中排列了 15000 个水果,我如何获得所有“纯香蕉邻域”(苹果、柠檬等)和所有其他组合?
干杯和最美好的祝愿。
Thank you for your comments so far; in the meantime, I have gone for a pre-fabricated solution, an add-in for ArcGis called Hawth's Tools. This really works like a breeze to find the n closest neighbors to any point feature with an x and y value. So I hope it can help someone with similar problems and questions.
However, it leaves me with a more database-related issue now. Do you have an idea how I can get any DBMS (preferably Access), to give me a list of all my combinations? That is, if I have a point feature with 15000 fruits arranged in space, how do I get all "pure banana neighborhoods" (apple, lemon, etc.) and all other combinations?
Cheers and best wishes.