Saltar al contenido

¿Mosaico de datos de GeoJSON?

Ya no busques más por todo internet porque llegaste al sitio perfecto, poseemos la respuesta que necesitas y sin complicaciones.

Solución:

He escrito mi propio controlador de mosaico de mapas geojson en ruby. es un script ruby ​​rápido y sucio para crear mosaicos geojson desde una base de datos postgis usando gdal / ogr. No pude averiguar cómo cortar el geojson directamente, así que importé el json a una base de datos postgis y lo exporté usando ogr.

Se supone que ogr debe leer geojson pero no pude hacer que el controlador funcione directamente. tal vez alguien más pueda averiguar cómo. así es como funcionó para mí usando postgis:

requiere

  • ruby > 1.9.3, pero ruby > 2.0.0 recomendado
  • gdal/ogr > 2.0.0, el script utiliza el comando del sistema ogr2ogr
  • postgresql > 9.0.0, con postgis > Extensión 2.0.0 instalada

uso

entorno de configuración

#!/usr/bin/env ruby

require 'mkmf'
require 'fileutils'
require './tiler/geojson.rb'

geojson_tiler = Tiler::GeoJson.new

configurar directorio de trabajo

geojson_tiler.set_basedir "/path/to/my/tiles"

habilite la salida verbosa si lo desea

geojson_tiler.debug true

configurar la conexión a la base de datos de Postgis y la consulta SQL para recuperar geodataset

connection = "'PG:host=localhost dbname=distance user=qwertyu password=asdfghj'"
sql_query = "'SELECT id,flags,kmh,geom_way_web_mercator,time FROM streets WHERE time <= 600 ORDER BY time ASC'"
geojson_tiler.setup_db connection, sql_query

escribir pila de mosaicos completa para los niveles de zoom 0, 1, 2 y 3

(0..3).each do |zoom|
  geojson_tiler.write_tiles zoom
end

o escriba una pila de mosaicos parcial para el nivel de zoom 8 en el rango x: 136..138 ey: 82..84

geojson_tiler.write_tiles 8, 136, 138, 82, 84

la sintaxis es zoom, xmin, xmax, ymin, ymax

resultado

es una pila completa o parcial de mosaicos geojson:

/path/to/my/tiles/0/0/0.json
/path/to/my/tiles/1/0/0.json
/path/to/my/tiles/1/0/1.json
/path/to/my/tiles/1/1/0.json
/path/to/my/tiles/1/1/1.json
/path/to/my/tiles/2/0/0.json
/path/to/my/tiles/2/0/1.json
/path/to/my/tiles/2/0/2.json
/path/to/my/tiles/2/0/3.json
/path/to/my/tiles/2/1/0.json
/path/to/my/tiles/2/1/1.json
/path/to/my/tiles/2/1/2.json
/path/to/my/tiles/2/1/3.json
/path/to/my/tiles/2/2/0.json
/path/to/my/tiles/2/2/1.json
/path/to/my/tiles/2/2/2.json
/path/to/my/tiles/2/2/3.json
/path/to/my/tiles/2/3/0.json
/path/to/my/tiles/2/3/1.json
/path/to/my/tiles/2/3/2.json
/path/to/my/tiles/2/3/3.json
/path/to/my/tiles/3/0/0.json
/path/to/my/tiles/3/0/1.json
/path/to/my/tiles/3/0/2.json
/path/to/my/tiles/3/0/3.json
/path/to/my/tiles/3/0/4.json
/path/to/my/tiles/3/0/5.json
/path/to/my/tiles/3/0/6.json
/path/to/my/tiles/3/0/7.json
/path/to/my/tiles/3/1/0.json
/path/to/my/tiles/3/1/1.json
/path/to/my/tiles/3/1/2.json
/path/to/my/tiles/3/1/3.json
/path/to/my/tiles/3/1/4.json
/path/to/my/tiles/3/1/5.json
/path/to/my/tiles/3/1/6.json
/path/to/my/tiles/3/1/7.json
/path/to/my/tiles/3/2/0.json
/path/to/my/tiles/3/2/1.json
/path/to/my/tiles/3/2/2.json
/path/to/my/tiles/3/2/3.json
/path/to/my/tiles/3/2/4.json
/path/to/my/tiles/3/2/5.json
/path/to/my/tiles/3/2/6.json
/path/to/my/tiles/3/2/7.json
/path/to/my/tiles/3/3/0.json
/path/to/my/tiles/3/3/1.json
/path/to/my/tiles/3/3/2.json
/path/to/my/tiles/3/3/3.json
/path/to/my/tiles/3/3/4.json
/path/to/my/tiles/3/3/5.json
/path/to/my/tiles/3/3/6.json
/path/to/my/tiles/3/3/7.json
/path/to/my/tiles/3/4/0.json
/path/to/my/tiles/3/4/1.json
/path/to/my/tiles/3/4/2.json
/path/to/my/tiles/3/4/3.json
/path/to/my/tiles/3/4/4.json
/path/to/my/tiles/3/4/5.json
/path/to/my/tiles/3/4/6.json
/path/to/my/tiles/3/4/7.json
/path/to/my/tiles/3/5/0.json
/path/to/my/tiles/3/5/1.json
/path/to/my/tiles/3/5/2.json
/path/to/my/tiles/3/5/3.json
/path/to/my/tiles/3/5/4.json
/path/to/my/tiles/3/5/5.json
/path/to/my/tiles/3/5/6.json
/path/to/my/tiles/3/5/7.json
/path/to/my/tiles/3/6/0.json
/path/to/my/tiles/3/6/1.json
/path/to/my/tiles/3/6/2.json
/path/to/my/tiles/3/6/3.json
/path/to/my/tiles/3/6/4.json
/path/to/my/tiles/3/6/5.json
/path/to/my/tiles/3/6/6.json
/path/to/my/tiles/3/6/7.json
/path/to/my/tiles/3/7/0.json
/path/to/my/tiles/3/7/1.json
/path/to/my/tiles/3/7/2.json
/path/to/my/tiles/3/7/3.json
/path/to/my/tiles/3/7/4.json
/path/to/my/tiles/3/7/5.json
/path/to/my/tiles/3/7/6.json
/path/to/my/tiles/3/7/7.json
/path/to/my/tiles/8/136/82.json
/path/to/my/tiles/8/136/83.json
/path/to/my/tiles/8/136/84.json
/path/to/my/tiles/8/137/82.json
/path/to/my/tiles/8/137/83.json
/path/to/my/tiles/8/137/84.json
/path/to/my/tiles/8/138/82.json
/path/to/my/tiles/8/138/83.json
/path/to/my/tiles/8/138/84.json

Un poco tarde para el juego, pero si quieres mosaicos vectoriales en formato mbtiles, te sugiero lo siguiente:

(1) tippecanoe: Vaya a https://github.com/mapbox/tippecanoe e instálelo, si está en una Mac, luego prepare la instalación de tippecanoe; A continuación, puede colocar en mosaico el geojson directamente con el siguiente comando: tippecanoe -e tiles -l layer_name file.geojson

A continuación, debido a que están comprimidos con gzip usando este método, debe usar los siguientes comandos (lo mismo si usa mbutil para descomprimir un archivo .mbtiles y obtenerlos de esa manera):

cd /the tiles folder
gzip -d -r -S .pbf *;
find . -type f -exec mv '' ''.pbf ;

Luego, en sus fuentes style.json, use el paquete de mosaicos de la siguiente manera (si los está sirviendo en un servidor, use http, si está en un dispositivo, use file: ///, etc.):

  "sources": {
        "customtiles": 
            "type": "vector",
            "tiles": [
                "0/assets/tiles/z/x/y.pbf"
            ],
            "minzoom": 0,
            "maxzoom": 18
        ,...

Y en tu sección de capas: capas:[
"id": "rds",
"type": "line",
"source": "customtiles",
"source-layer": "layer_name",
"paint":
"line-opacity": 0.8,
"line-width": 2,
"line-color": "#FF0000"

,...]

(2) Utilice el método nodejs geojson-vt y vt-pbf. Personalmente estoy usando esto porque lo estoy ejecutando en Heroku y no quiero hacer un módulo usando C ++ o hacer un complemento de Heroku / usar un proceso secundario. Un gran ejemplo de esto se encuentra en https://github.com/NYCPlanning/geojson2mvt. Esencialmente, puede cambiar este script para generar pbfs en lugar de mvts y funciona.

Una gran diferencia es que geojson-vt simplifica mucho y tippecanoe no. Por lo tanto, los mosaicos geojson-vt son mucho más pequeños y no he encontrado que la calidad se degrade demasiado. Para obtener una versión sobre la marcha, consulte este ejemplo: http://fuzzytolerance.info/blog/2016/07/31/Adding-GeoJSON-and-MVT-to-PostGIS-HTTP-API/

Calificaciones y reseñas

Recuerda que puedes difundir esta división si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *