我正在使用MongoDB开发地理空间网络应用程序。我在具有不同类别(COUNTRY
,STATE
等)的集合上有很多多边形,我想知道哪个是COUNTRY
某个多边形,STATE
但是在某些情况下,邻居COUNTRY
的边界碰到了多边形的边界,STATE
所以当我查询十字路口,我有2个国家。
我想计算该州与两个国家之间的重叠百分比,以了解哪个是父级。我一直在寻找,但是我没有找到具有这种操作的任何库,并且我做这种算法不是很好。
编辑:添加更多上下文
这是我正在使用的模型
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"`
}
这是我现在拥有的代码块:
func findParent(state *GeoEntity) GeoEntity{
session, err := mgo.Dial("localhost")
check(err)
defer session.Close()
entities := session.DB("geo").C("entity")
query := bson.M{
"geometry": bson.M{
"$geoIntersects": bson.M{
"$geometry": state.Geometry,
},
},
"type": "COUNTRY",
}
var countries []GeoEntity
err = entities.Find(query).All(&countries)
check(err)
var parent GeoEntity
if len(countries) > 1 {
//TODO: parent = findTheTrueParent(countries, state)
} else {
parent = countries[0]
}
return parent
}
这是我遇到的问题的图像示例。当我进行查询时,我得到了两个国家,红色和绿色,但是真正的父母是绿色。
如果可以假设一个多边形始终是另一个多边形的一个区域(完全包含在该多边形中),则可以不使用整个多边形作为该区域,而只需计算该多边形的中心点,并使用一个点或一个很小的正方形作为那一点要考验父母。如果您有边界框,那么应该很容易找到中心点。
这样,您可以避免重叠两个父对象的边出现的问题,并且只要您知道该区域在其父对象之内并且不只是与之重叠,它就适用于任何区域。
因此,您甚至不需要两个查询,只需将state.Geometry减小到围绕其中心点的小正方形,然后查询即可。
我希望通过一条线串拆分一个多多边形(代表一个有岛屿的国家),从而将该县一分为二。 此结果是GeometryCollection对象中的一组多边形。如何将结果分组为两个多多边形对象,每个对象都包含各自一半的多边形? 使现代化 问题:确定分裂形状几何的“左”和“右”侧提供了一个很好的解决方案,其中从结果中的每个多边形中提取一个点,看看当与分裂的LineString结合时,它是否形成顺时针或逆时针线串。
Highcharts 柱形图 以下实例演示了使用百分比的堆叠柱形图。 我们在前面的章节已经了解了 Highcharts 基本配置语法。接下来让我们来看下其他的配置。在 plotOptions 中添加 stacking 属性: 配置 plotOptions:数据点选项 plotOptions用于设置图表中的数据点相关属性。plotOptions根据各种图表类型,其属性设置略微有些差异。 配置图表堆叠
返回顶点的输入数组,并且附有一些其他方法,如下面所描述 polygon.area() 返回此多边形的标定区域。如果顶点是逆时针顺序,面积为正,否则为负。 polygon.centroid() 返回一个表示此多边形的质心的两元素数组。 polygon.clip(subject) 对这个多边形剪切主题多边形。换句话说,返回一个多边形表示这个多边形和主题多边形的交集。假定剪切的多边形是逆时针方向以及凸多
我有一个“SpatialPolygons”对象,我想在@hole==FALSE处对多边形进行子集,并创建一个新对象。 使用下面的代码,一次可以预测得到1个多边形(如果@hole==TRUE,则没有),但我无法从对象中分割多个多边形。 我认为我的问题在于我不知道如何“一般”引用第二个列表,即从列表(Polygon)中获取项目,其中@孔==FALSE。将第二个[[]]留空不起作用。 附言:抱歉,没有可
本文向大家介绍Java多边形重心计算,包括了Java多边形重心计算的使用技巧和注意事项,需要的朋友参考一下 多边形重心计算 三角形重心 顶点为a,b,c的三角形重心为x = (xa + xb + xc) / 3,y = (ya + yb + yc) / 3 多边形重心 x = (x1w1 + x2w2 + … + xnwn)/W y = (y1w1 + y2w2 + … + ynwn)/W 总结
我有一个包含多边形的json,这些多边形表示一个国家中所有城市(总共78个)的分隔符。例如: 有没有什么方法可以用一个查询将所有城市的结果分组,或者我必须查询数据库78次才能获得每个城市的计数?