This repo contains all the public protobufs for Mapped Platform Service Definitions. Please refer to Mapped Developer Docs for more information.
This monorepo generates packages or outputs for several languages:
- C# - Published as a package to GPR: Mapped.PB
- Java - Published as a package to GPR: com.mapped.pb
- TypeScript
- For Node.JS - Published as a package to GPR: pb-node
- For Browsers - Published as a package to GPR: pb-browser
- Python - Published on PyPi: mapped.pb
- Go - Published as a module to
go.mapped.dev/pb
(which in turn points to https://github.com/mapped/pb-go)- Use
go get go.mapped.dev/pb/cloud
orgo get go.mapped.dev/pb/gateway
- Use
All GeoJSON is carried in google.protobuf.Struct
, as can be seen in mapped/cloud/types/typed_value.proto. Each language's Google Protobuf library has handlers for going from JSON
<->google.protobuf.Struct
. To simplify things, this section will list how to do each transform in languages we use at Mapped.
(All samples skip over normal protobuf message marshal/unmarshal work, as it doesn't change based on the use of structs)
From GeoJSON to Struct:
string json = File.ReadAllText(@"test.json");
var pbStruct = Google.Protobuf.WellKnownTypes.Struct.Parser.ParseJson(json);
myMsg.Value.GeojsonValue = pbStruct;
From Struct to GeoJSON:
string json = Google.Protobuf.JsonFormatter.Default.Format(myMsg.Value.GeojsonValue);
(Samples are missing all error checking for brevity)
From GeoJSON to Struct:
import (
"encoding/json"
"io/ioutil"
"os"
"go.mapped.dev/pb/cloud"
"google.golang.org/protobuf/types/known/structpb"
)
func geojsonToStruct() *cloud.types.TypedValue {
// Read some json from disk
jsonFile, _ := os.Open("test.json")
defer jsonFile.Close()
byteValue, _ := ioutil.ReadAll(jsonFile)
// Unmarshal the json
var jsonMap map[string]interface{}
json.Unmarshal([]byte(byteValue), &jsonMap)
// Put the json in to a Struct
pbStruct, _ := structpb.NewStruct(jsonMap)
// Use the Struct
return &cloud.types.TypedValue{
Value: &cloud.types.TypedValue_GeojsonValue{GeojsonValue: pbStruct},
}
}
From Struct to GeoJSON:
import (
"encoding/json"
"io/ioutil"
"os"
"go.mapped.dev/pb/cloud"
"google.golang.org/protobuf/types/known/structpb"
)
func structToGeojson(v *cloud.types.TypedValue) string {
// Marshal to json
jsonMap := v.GetGeojsonValue().AsMap()
jsonBytes, _ := json.Marshal(jsonMap)
// Return as a string
return string(jsonBytes)
}
The CI build pipeline creates tags automatically.