MongoDBを使用したジオ空間Webアプリケーションで作業しています。私はさまざまなカテゴリ(COUNTRY
、STATE
など)のコレクションにたくさんのポリゴンを持っていて、どれがSTATE
のCOUNTRY
であるか知りたがっていますが、場合によっては隣接の境界がCOUNTRY
の境界にSTATE
私は交差点を照会するとき、私は2つの国を取得します。ポリゴンオーバーラップ率
どの国が親であるかを知るために、国と両国の重複率を計算したいと考えています。私は見てきましたが、私はこの種の操作でライブラリを見つけられませんでした。この種のアルゴリズムを実行するのはあまり良くありません。
EDIT:
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
}
:これは私が
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.私が質問をするとき、私は両方の国、赤と緑の1つを取得しますが、本当の親はgreeですなし。
golangの地理空間ライブラリはかなりありますが、データの格納方法やこれまでの作業を知らなくても、この質問はあまり一般的ではありません。 – Andrew
Goを使用する前にプレーンなMongoDBクエリを作成しようとしましたか? –
はい、まさに私が示していることです。隣国の境界が国家の境界と重なっているため、mongoクエリは2つの親を返します –