我在SQL Server中创建一个简单的地理空间数据库。它将包含世界上所有国家及其行政区域的区域(多边形)。数据将来自OpenStreetMap。对于数据库中的每个多边形,我只存储唯一的ID和名称。如果有的话,这个数据库很少被写入(我只会加载一次数据而且只是加载数据)。
尽管我只获得了这些一般的界限,但仍有大量数据 - 整个世界都在4GB as GeoJSON左右。数据库可能会更高效,但所有索引和所有内容我仍然期望它的大小超过1GB。
多边形按其管理级别"组织。 0级包含所有国家; 1级包含最大的行政区划等。但是这确实因国家/地区而异 - 很少有国家使用所有级别,大多数国家使用3到4级,但哪些级别 - 取决于国家。
我相信"更低的" level将始终属于(完全适合内部)到"更高的"水平。但是它可能不是前一个数字级别。例如,如果一个国家使用级别1,2和5,那么级别5中的多边形将属于级别2中的多边形,这将属于级别1中的多边形。至少我希望每个级别的多边形都大于0适合0级(国家/地区)的多边形。我还没有对此进行过测试,但是如果有任何冲突(有争议的地区,可能?),那么我会想出一些方法来解决它们以建立亲子关系。
我需要通过以下方式查询此数据:
如何创建可以有效查询的数据结构?
通过边界框查询只能使用地理空间索引有效地完成,但不会按行政级别进行过滤。我不想通过地理空间索引选择所有形状,然后对它们进行全面扫描 - 当我在0级请求整个世界时,这将失败。
我可以在他们自己的表中拆分每个级别,这对于level + bbox标准可以很好地工作,但是如果他们可能在几个表上被涂抹了,那么如何选择父级的所有子级呢?我甚至无法创建索引视图,因为它不支持UNION。
我可以将所有内容存储在两个副本中 - 第一个查询的分割表;单表为第二。但这会使数据库中的数据量翻倍,这已经相当大了。
有什么想法吗?