Go 语言 Mongo GeoJSON
GoLang Mongo GeoJSON
在 Golang 中,使用 MongoDB,我试图存储 GeoJSON 对象,同时保持 2dsphere 索引。
我无法声明可以同时处理“点”和“多边形”的通用结构,因为“点”有一个 []float64
坐标字段,而“多边形”有一个 [][]float64
坐标字段.
你知道如何声明这样的结构吗?
您可以尝试在结构中使用 interface
作为 polygon
和 point
的字段。我为您的场景创建了一个简单的程序,如下所示:
package main
import (
"fmt"
)
type figure struct {
name string
coordinates interface{}
}
func main() {
Point := figure{"Point", [2]float64{2.0, 7.88}}
Polygon := figure{"Polygon", [2][2]float64{{2.0, 7.88}, {3.0, 7.88}}}
fmt.Println(Point)
fmt.Println(Polygon)
}
输出:
{Point [2 7.88]}
{Polygon [[2 7.88] [3 7.88]]}
首先,Ghoper的回答100%正确。 Coordinates interface{}
的加入对我帮助很大。对于以后访问这里的任何人,这是我的 GeoJson Feature Collection 结构布局以供参考:
// Feature Collection
type FeatureCollection struct {
ID string `json:"_id,omitempty" bson:"_id,omitempty"`
Features []Feature `json:"features" bson:"features"`
Type string `json:"type" bson:"type"`
}
// Individual Feature
type Feature struct {
Type string `json:"type" bson:"type"`
Properties Properties `json:"properties" bson:"properties"`
Geometry Geometry `json:"geometry" bson:"geometry"`
}
// Feature Properties
type Properties struct {
Name string `json:"name" bson:"name"`
Height uint64 `json:"height" bson:"height"`
Purchased bool `json:"purchased" bson:"purchased"`
LastUpdated string `json:"last_updated" bson:"last_updated"`
}
// Feature Geometry
type Geometry struct {
Type string `json:"type" bson:"type"`
Coordinates interface{} `json:"coordinates" bson:"coordinates"`
}
适用于所有 GeoJson 类型(LineString、Point、Polygon、MultiPolygon)
在 Golang 中,使用 MongoDB,我试图存储 GeoJSON 对象,同时保持 2dsphere 索引。
我无法声明可以同时处理“点”和“多边形”的通用结构,因为“点”有一个 []float64
坐标字段,而“多边形”有一个 [][]float64
坐标字段.
你知道如何声明这样的结构吗?
您可以尝试在结构中使用 interface
作为 polygon
和 point
的字段。我为您的场景创建了一个简单的程序,如下所示:
package main
import (
"fmt"
)
type figure struct {
name string
coordinates interface{}
}
func main() {
Point := figure{"Point", [2]float64{2.0, 7.88}}
Polygon := figure{"Polygon", [2][2]float64{{2.0, 7.88}, {3.0, 7.88}}}
fmt.Println(Point)
fmt.Println(Polygon)
}
输出:
{Point [2 7.88]}
{Polygon [[2 7.88] [3 7.88]]}
首先,Ghoper的回答100%正确。 Coordinates interface{}
的加入对我帮助很大。对于以后访问这里的任何人,这是我的 GeoJson Feature Collection 结构布局以供参考:
// Feature Collection
type FeatureCollection struct {
ID string `json:"_id,omitempty" bson:"_id,omitempty"`
Features []Feature `json:"features" bson:"features"`
Type string `json:"type" bson:"type"`
}
// Individual Feature
type Feature struct {
Type string `json:"type" bson:"type"`
Properties Properties `json:"properties" bson:"properties"`
Geometry Geometry `json:"geometry" bson:"geometry"`
}
// Feature Properties
type Properties struct {
Name string `json:"name" bson:"name"`
Height uint64 `json:"height" bson:"height"`
Purchased bool `json:"purchased" bson:"purchased"`
LastUpdated string `json:"last_updated" bson:"last_updated"`
}
// Feature Geometry
type Geometry struct {
Type string `json:"type" bson:"type"`
Coordinates interface{} `json:"coordinates" bson:"coordinates"`
}
适用于所有 GeoJson 类型(LineString、Point、Polygon、MultiPolygon)