geometalab / geojson2vt

Converts GeoJSON to vector tiles :scissors: :earth_americas:

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status

geojson2vt

Python port of JS GeoJSON-VT to convert GeoJSON into vector tiles. ✂️ 🌎

Further, it provides the ability to convert the generate vector tiles to separate GeoJSONs (vt2geojson).

Usage

geojson2vt

# build an initial index of tiles
tile_index = geojson2vt(geojson, {})

# request a particular tile
features = tile_index.get_tile(z, x, y).get('features')

# show an array of tile coordinates created so far
print(tile_index.tile_coords) # [{'z': 0, 'x': 0, 'y': 0}, ...]
Options

You can fine-tune the results with an options object, although the defaults are sensible and work well for most use cases.

tile_index = geojson2vt(data, {
	'maxZoom': 14,  # max zoom to preserve detail on; can't be higher than 24
	'tolerance': 3, # simplification tolerance (higher means simpler)
	'extent': 4096, # tile extent (both width and height)
	'buffer': 64,   # tile buffer on each side
	'lineMetrics': False, # whether to enable line metrics tracking for LineString/MultiLineString features
	'promoteId': None,    # name of a feature property to promote to feature.id. Cannot be used with `generateId`
	'generateId': False,  # whether to generate feature ids. Cannot be used with `promoteId`
	'indexMaxZoom': 5,       # max zoom in the initial tile index
	'indexMaxPoints': 100000 # max number of points per tile in the index
}, logging.INFO)

By default, tiles at zoom levels above indexMaxZoom are generated on the fly, but you can pre-generate all possible tiles for data by setting indexMaxZoom and maxZoom to the same value, setting indexMaxPoints to 0, and then accessing the resulting tile coordinates from the tile_coords property of tile_index.

The promoteId and generateId options ignore existing id values on the feature objects.

geojson2vt only operates on zoom levels up to 24.

vt2geojson

# build an initial index of tiles
tile_index = geojson2vt(geojson_data, {})

# get a specific tile
vector_tile = tile_index.get_tile(z, x, y)

# convert a specific vector tile to GeoJSON
geojson = vt2geojson(vector_tile)

Install

geojson2vt is available on PyPi.

Install using pip.

pip install geojson2vt

Import geojson2vt

from geojson2vt.geojson2vt import geojson2vt

Acknowledgements

All the credit belongs to the collaborators of JS GeoJSON-VT.

Notes

Currently, geojson2vt isn't written in a very pythonic way. This is due to the fact of the port from geojson-vt. Further development could lead to a more pythonic maner for a more seamless Python usage. 🐍

About

Converts GeoJSON to vector tiles :scissors: :earth_americas:

License:ISC License


Languages

Language:Python 100.0%