Documentation ¶
Index ¶
- Variables
- func Marshal(geom orb.Geometry, srid int, byteOrder ...binary.ByteOrder) ([]byte, error)
- func MarshalToHex(geom orb.Geometry, srid int, byteOrder ...binary.ByteOrder) (string, error)
- func MustMarshal(geom orb.Geometry, srid int, byteOrder ...binary.ByteOrder) []byte
- func MustMarshalToHex(geom orb.Geometry, srid int, byteOrder ...binary.ByteOrder) string
- func Unmarshal(data []byte) (orb.Geometry, int, error)
- func Value(g orb.Geometry, srid int) driver.Valuer
- func ValuePrefixSRID(g orb.Geometry, srid int) driver.Valuer
- type Decoder
- type Encoder
- type GeometryScanner
Constants ¶
This section is empty.
Variables ¶
var ( // ErrUnsupportedDataType is returned by Scan methods when asked to scan // non []byte data from the database. This should never happen // if the driver is acting appropriately. ErrUnsupportedDataType = errors.New("wkb: scan value must be []byte") // ErrNotEWKB is returned when unmarshalling EWKB and the data is not valid. ErrNotEWKB = errors.New("wkb: invalid data") // ErrIncorrectGeometry is returned when unmarshalling EWKB data into the wrong type. // For example, unmarshaling linestring data into a point. ErrIncorrectGeometry = errors.New("wkb: incorrect geometry") // ErrUnsupportedGeometry is returned when geometry type is not supported by this lib. ErrUnsupportedGeometry = errors.New("wkb: unsupported geometry") )
var DefaultByteOrder binary.ByteOrder = binary.LittleEndian
DefaultByteOrder is the order used for marshalling or encoding is none is specified.
var DefaultSRID int = 4326
DefaultSRID is set to 4326, a common SRID, which represents spatial data using longitude and latitude coordinates on the Earth's surface as defined in the WGS84 standard, which is also used for the Global Positioning System (GPS). This will be used by the encoder if non is specified.
Functions ¶
func Marshal ¶
Marshal encodes the geometry with the given byte order. An SRID of 0 will not be included in the encoding and the result will be a wkb encoding of the geometry.
func MarshalToHex ¶
MarshalToHex will encode the geometry into a hex string representation of the binary ewkb.
func MustMarshal ¶
MustMarshal will encode the geometry and panic on error. Currently there is no reason to error during geometry marshalling.
func MustMarshalToHex ¶
MustMarshalToHex will encode the geometry and panic on error. Currently there is no reason to error during geometry marshalling.
Types ¶
type Decoder ¶
type Decoder struct {
// contains filtered or unexported fields
}
Decoder can decoder WKB geometry off of the stream.
type Encoder ¶
type Encoder struct {
// contains filtered or unexported fields
}
An Encoder will encode a geometry as EWKB to the writer given at creation time.
func NewEncoder ¶
NewEncoder creates a new Encoder for the given writer.
func (*Encoder) SetByteOrder ¶
SetByteOrder will override the default byte order set when the encoder was created.
type GeometryScanner ¶
type GeometryScanner struct { SRID int Geometry orb.Geometry Valid bool // Valid is true if the geometry is not NULL // contains filtered or unexported fields }
GeometryScanner is a thing that can scan in sql query results. It can be used as a scan destination:
var s wkb.GeometryScanner err := db.QueryRow("SELECT latlon FROM foo WHERE id=?", id).Scan(&s) ... if s.Valid { // use s.Geometry // use s.SRID } else { // NULL value }
func Scanner ¶
func Scanner(g interface{}) *GeometryScanner
Scanner will return a GeometryScanner that can scan sql query results. The geometryScanner.Geometry attribute will be set to the value. If g is non-nil, it MUST be a pointer to an orb.Geometry type like a Point or LineString. In that case the value will be written to g and the Geometry attribute.
var p orb.Point err := db.QueryRow("SELECT latlon FROM foo WHERE id=?", id).Scan(wkb.Scanner(&p)) ... // use p
If the value may be null check Valid first:
var point orb.Point s := wkb.Scanner(&point) err := db.QueryRow("SELECT latlon FROM foo WHERE id=?", id).Scan(s) ... if s.Valid { // use p } else { // NULL value }
func ScannerPrefixSRID ¶
func ScannerPrefixSRID(g interface{}) *GeometryScanner
ScannerPrefixSRID will scan ewkb data were the SRID is in the first 4 bytes of the data. Databases like mysql/mariadb use this as their raw format. This method should only be used when working with such a database.
var p orb.Point err := db.QueryRow("SELECT latlon FROM foo WHERE id=?", id).Scan(wkb.PrefixSRIDScanner(&p))
However, it is recommended to covert to wkb explicitly using something like:
var srid int var p orb.Point err := db.QueryRow("SELECT ST_SRID(latlon), ST_AsBinary(latlon) FROM foo WHERE id=?", id). Scan(&srid, wkb.Scanner(&p))
https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html
func (*GeometryScanner) Scan ¶
func (s *GeometryScanner) Scan(d interface{}) error
Scan will scan the input []byte data into a geometry. This could be into the orb geometry type pointer or, if nil, the scanner.Geometry attribute.