如何创建一个允许按不同标准对地理空间数据进行有效查询的表格?

时间:2016-03-12 11:17:36

标签: sql-server performance geospatial

数据描述:

我在SQL Server中创建一个简单的地理空间数据库。它将包含世界上所有国家及其行政区域的区域(多边形)。数据将来自OpenStreetMap。对于数据库中的每个多边形,我只存储唯一的ID和名称。如果有的话,这个数据库很少被写入(我只会加载一次数据而且只是加载数据)。

尽管我只获得了这些一般的界限,但仍有大量数据 - 整个世界都在4GB as GeoJSON左右。数据库可能会更高效,但所有索引和所有内容我仍然期望它的大小超过1GB。

多边形按其管理级别"组织。 0级包含所有国家; 1级包含最大的行政区划等。但是这确实因国家/地区而异 - 很少有国家使用所有级别,大多数国家使用3到4级,但哪些级别 - 取决于国家。

我相信"更低的" level将始终属于(完全适合内部)到"更高的"水平。但是它可能不是前一个数字级别。例如,如果一个国家使用级别1,2和5,那么级别5中的多边形将属于级别2中的多边形,这将属于级别1中的多边形。至少我希望每个级别的多边形都大于0适合0级(国家/地区)的多边形。我还没有对此进行过测试,但是如果有任何冲突(有争议的地区,可能?),那么我会想出一些方法来解决它们以建立亲子关系。

要求说明:

我需要通过以下方式查询此数据:

  1. 通过指定级别和边界框,应返回此管理级别和特定边界框内的所有多边形(以及ID和名称)。
  2. 通过指定父多边形ID,我想获取所有直接子多边形,无论它们属于哪个级别(但只有直接子级,而不是孙子级)。
  3. 我被困的地方:

    如何创建可以有效查询的数据结构?

    通过边界框查询只能使用地理空间索引有效地完成,但不会按行政级别进行过滤。我不想通过地理空间索引选择所有形状,然后对它们进行全面扫描 - 当我在0级请求整个世界时,这将失败。

    我可以在他们自己的表中拆分每个级别,这对于level + bbox标准可以很好地工作,但是如果他们可能在几个表上被涂抹了,那么如何选择父级的所有子级呢?我甚至无法创建索引视图,因为它不支持UNION。

    我可以将所有内容存储在两个副本中 - 第一个查询的分割表;单表为第二。但这会使数据库中的数据量翻倍,这已经相当大了。

    有什么想法吗?

0 个答案:

没有答案