我正在使用MongoDB开发一个地理空间网络应用程序。我在包含不同类别(COUNTRY
,STATE
等)的集合中有很多多边形,我想知道某个COUNTRY
的{{1}}是哪个但在某些情况下,邻居STATE
的边界正在触及COUNTRY
的边界,所以当我查询交叉点时,我会得到2个国家。
我想计算州和两个国家之间的重叠百分比,以了解哪一个是父母。我一直在寻找,但我没有找到任何这种操作的库,我做这种算法并不是很好。
编辑:添加更多上下文
这是我正在使用的模型
STATE
这是我现在拥有的一大块代码:
type GeoEntity struct {
ID bson.ObjectId `json:"id" bson:"_id"`
Type string `json:"type" bson:"type"` // COUNTRY, STATE, etc.
Geometry Geometry `json:"geometry" bson:"geometry"`
}
// GeoJSON entity
type Geometry struct {
Type string `json:"type" bson:"type"`
Coordinates [][][][]float64 `json:"coordinates" bson:"coordinates"`
}
And here is an image example of the problem I'm having.当我进行查询时,我得到了两个国家,红色和绿色,但真正的父母是绿色的。
答案 0 :(得分:0)
如果你可以假设一个多边形总是另一个多边形的区域(完全由它包含),你可以代替使用该区域的整个多边形来计算它的中心点,并使用一个点或一个非常那个小广场对父母进行考验。如果你有一个边界框,中心点应该很容易找到。
通过这种方式,您可以避免使用与两个父项重叠的边缘看到的问题,只要您知道该区域位于其父级内而不仅仅是重叠区域,它就可以适用于任何区域。
所以你可能甚至不需要两个查询,只需将state.Geometry减少到围绕其中心点的小方块,然后用它来查询。