Documentation
¶
Overview ¶
Package wkb is for decoding ESRI's Well Known Binary (WKB) format specification at https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
Package wkb is for decoding ESRI's Well Known Binary (WKB) format specification at https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
Package wkb is for decoding ESRI's Well Known Binary (WKB) format specification at https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
Index ¶
- Variables
- func BufferedReader(bufferedReader io.Reader) []space.Geometry
- func BufferedWriter(bufferedWriter io.Writer, geoms []space.Geometry)
- func GeomFromWKBHexStr(wkbHex string) (space.Geometry, error)
- func GeomToWKBHexStr(geom space.Geometry) (wkbHex string, err error)
- func HexToBytes(hex string) []byte
- func Marshal(geom space.Geometry, bo ...byteOrder) ([]byte, error)
- func MustMarshal(geom space.Geometry, bo ...byteOrder) []byte
- func Unmarshal(data []byte) (space.Geometry, error)
- func Value(g space.Geometry) driver.Valuer
- type Decoder
- type EWKBDecoder
- type EWKBEncoder
- 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") // ErrNotWKB is returned when unmarshalling WKB and the data is not valid. ErrNotWKB = errors.New("wkb: invalid data") // ErrIncorrectGeometry is returned when unmarshalling WKB 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 ErrAttempt = fmt.Errorf("Attempt to read past end of input")
ErrAttempt ...
var ErrUnknownWKBType = fmt.Errorf("Unknown WKB type ")
ErrUnknownWKBType ...
Functions ¶
func BufferedReader ¶ added in v1.0.1
BufferedReader returns []Geometry from reader.
func BufferedWriter ¶ added in v1.0.1
BufferedWriter returns []Geometry from reader.
func GeomFromWKBHexStr ¶ added in v1.0.1
GeomFromWKBHexStr convert hex string to GEOSGeometry
func GeomToWKBHexStr ¶ added in v1.0.2
func HexToBytes ¶ added in v1.0.1
HexToBytes Converts a hexadecimal string to a byte array. The hexadecimal digit symbols are case-insensitive.
func MustMarshal ¶
MustMarshal 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 EWKBDecoder ¶ added in v1.0.1
type EWKBDecoder struct { Srid uint32 // contains filtered or unexported fields }
EWKBDecoder Decoder can decoder EWKB geometry off of the stream.
type EWKBEncoder ¶ added in v1.0.1
EWKBEncoder Decoder can decoder EWKB geometry off of the stream.
type Encoder ¶
type Encoder struct {
// contains filtered or unexported fields
}
An Encoder will encode a geometry as WKB to the writer given at creation time.
func NewEncoder ¶
NewEncoder creates a new Encoder for the given writer.
type GeometryScanner ¶
type GeometryScanner struct { Geometry space.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 } 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 space.Geometry type like a Point or LineString. In that case the value will be written to g and the Geometry attribute.
var p space.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 space.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 }
Scanning directly from MySQL columns is supported. By default MySQL returns geometry data as WKB but prefixed with a 4 byte SRID. To support this, if the data is not valid WKB, the code will strip the first 4 bytes and try again. This works for most use cases.
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 space geometry type pointer or, if nil, the scanner.Geometry attribute.