Go 语言 Mongo GeoJSON

GoLang Mongo GeoJSON

在 Golang 中,使用 MongoDB,我试图存储 GeoJSON 对象,同时保持 2dsphere 索引。

我无法声明可以同时处理“点”和“多边形”的通用结构,因为“点”有一个 []float64 坐标字段,而“多边形”有一个 [][]float64 坐标字段.

你知道如何声明这样的结构吗?

您可以尝试在结构中使用 interface 作为 polygonpoint 的字段。我为您的场景创建了一个简单的程序,如下所示:

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)