topojson

package module
v0.0.0-...-3e15ef9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 3, 2021 License: BSD-3-Clause Imports: 7 Imported by: 0

README

topojson - TopoJSON implementation in Go

Build Status GoDoc

Implements the TopoJSON specification: https://github.com/mbostock/topojson-specification

Uses the GeoJSON implementation of paulmach: https://github.com/paulmach/go.geojson

Large parts are a port of the canonical JavaScript implementation, big chunks of the test suite are ported as well: https://github.com/mbostock/topojson

Installation

go get github.com/rubenv/topojson

Import into your application with:

import "github.com/rubenv/topojson"

Usage

topology := topojson.NewTopology(fc, nil)

Optionally pass options as the second argument.

This generates a Topology which can be encoded to JSON.

License

Copyright (c) 2016-2018, Ruben Vermeersch
Copyright (c) 2012-2016, Michael Bostock
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* The name Michael Bostock may not be used to endorse or promote products
  derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Documentation

Overview

Package topojson contains all the needed logic for converting GeoJSON from/to TopoJSON.

Implements the TopoJSON specification: https://github.com/mbostock/topojson-specification

Uses the GeoJSON implementation of paulmach: https://github.com/paulmach/go.geojson

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Geometry

type Geometry struct {
	ID          string                 `json:"id,omitempty"`
	Type        geojson.GeometryType   `json:"type"`
	Properties  map[string]interface{} `json:"properties,omitempty"`
	BoundingBox []float64              `json:"bbox,omitempty"`

	Point           []float64
	MultiPoint      [][]float64
	LineString      []int
	MultiLineString [][]int
	Polygon         [][]int
	MultiPolygon    [][][]int
	Geometries      []*Geometry
}

func (*Geometry) MarshalJSON

func (g *Geometry) MarshalJSON() ([]byte, error)

MarshalJSON converts the geometry object into the correct JSON. This fulfills the json.Marshaler interface.

func (*Geometry) UnmarshalJSON

func (g *Geometry) UnmarshalJSON(data []byte) error

UnmarshalJSON decodes the data into a TopoJSON geometry. This fulfills the json.Unmarshaler interface.

type Topology

type Topology struct {
	Type      string     `json:"type"`
	Transform *Transform `json:"transform,omitempty"`

	BoundingBox []float64            `json:"bbox,omitempty"`
	Objects     map[string]*Geometry `json:"objects"`
	Arcs        [][][]float64        `json:"arcs"`
	// contains filtered or unexported fields
}

func NewTopology

func NewTopology(fc *geojson.FeatureCollection, opts *TopologyOptions) *Topology

func UnmarshalTopology

func UnmarshalTopology(data []byte) (*Topology, error)

UnmarshalTopology decodes the data into a TopoJSON topology. Alternately one can call json.Unmarshal(topo) directly for the same result.

func (*Topology) Filter

func (t *Topology) Filter(ids []string) *Topology

Filter topology into a new topology that only contains features with the given IDs

func (*Topology) MarshalJSON

func (t *Topology) MarshalJSON() ([]byte, error)

MarshalJSON converts the topology object into the proper JSON. It will handle the encoding of all the child geometries. Alternately one can call json.Marshal(t) directly for the same result.

func (*Topology) ToGeoJSON

func (t *Topology) ToGeoJSON() *geojson.FeatureCollection

type TopologyOptions

type TopologyOptions struct {
	// Pre-quantization precision
	PreQuantize float64

	// Post-quantization precision
	PostQuantize float64

	// Maximum simplification error, set to 0 to disable
	Simplify float64

	// ID property key
	IDProperty string
}

type Transform

type Transform struct {
	Scale     [2]float64 `json:"scale"`
	Translate [2]float64 `json:"translate"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL