Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Issue rendering tiles in non Spherical Mercator projection

Abierto
#275 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
25/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
cpp

Línea de trabajo

Comienza en el cálculo del cuadro delimitador referenciado en src/gen_tile.cpp y compáralo después con la configuración de proyección cargada desde renderd.conf y mapnik-bng.xml. Reproduce la solicitud a /tile/0/0/0.png usando el conjunto de datos de Wales e inspecciona el metatile generado. Se considera terminado cuando la solicitud BNG entrega el tile que contiene la extensión de los datos sin romper el comportamiento existente de renderizado de tiles.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

I'm attempting to generate a slippy map tiles in a specific projection system (EPSG:27700, British National Grid), for a specific subset of OSM data covering Wales, using this pbf file.

I am using the switch2osm stack, and am running their docker container on Ubuntu 20.04 just on localhost, following these instructions.

To attempt to generate tiles in EPSG:27700, I've made a minor edit to my mapnik xml stylesheet, specifying the epsg:27700 map projection string:
<Map srs="+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs" background-color="#f2efe9">

After editing this style sheet, I've checked that mapnik can generate a BNG tile and correctly transform the osm postgis source data (in EPSG:3857), this is the python snippet:

import mapnik
m = mapnik.Map(256,256)
mapnik.load_map(m, '/home/renderer/src/openstreetmap-carto/mapnik-bng.xml')
extent_uk_tile_s_bng = mapnik.Box2d(0, 0, 700000, 700000)
m.zoom_to_box(extent_uk_tile_s_bng)
mapnik.render_to_file(m, 'output.png')

image

The output draws a tile in EPSG:27700 and correctly displays my data (in EPSG:3857), so this tells me my mapnik stylesheet appears to be correctly configured.

This is my renderd.conf (only changing the XML path from the default shipped with switch2osm:

$ cat /usr/local/etc/renderd.conf 
[renderd]
num_threads=4
tile_dir=/var/lib/mod_tile
stats_file=/var/run/renderd/renderd.stats

[mapnik]
plugins_dir=/usr/lib/mapnik/3.0/input
font_dir=/usr/share/fonts/truetype
font_dir_recurse=1

[ajt]
URI=/tile/
TILEDIR=/var/lib/mod_tile
XML=/home/renderer/src/openstreetmap-carto/mapnik-bng.xml
HOST=localhost
TILESIZE=256
MAXZOOM=20

The following log entries are generated from request http://localhost/tile/0/0/0.png.

	renderd[2313]: Using bng projection settings
	renderd[2313]: Using bng projection settings
	renderd[2313]: Using bng projection settings
	renderd[2313]: Using bng projection settings
	renderd[2313]: DEBUG: Got incoming connection, fd 7, number 1
	renderd[2313]: DEBUG: Got incoming request with protocol version 2
	renderd[2313]: DEBUG: Got command RenderPrio fd(7) xml(ajt), z(0), x(0), y(0), mime(image/png), options()
	renderd[2313]: DEBUG: START TILE ajt 0 0-0 0-0, new metatile
	renderd[2313]: Rendering projected coordinates 0 0 0 -> 0.000000|0.000000 700000.000000|1400000.000000 to a 1 x 2 tile
	renderd[2313]: DEBUG: DONE TILE ajt 0 0-0 0-0 in 1.705 seconds
	debug: Creating and writing a metatile to /var/lib/mod_tile/ajt/0/0/0/0/0/0.meta
	renderd[2313]: DEBUG: Sending render cmd(3 ajt 0/0/0) with protocol version 2 to fd 7
	renderd[2313]: DEBUG: Connection 0, fd 7 closed, now 0 left

The log entry Rendering projected coordinates 0 0 0 -> 0.000000|0.000000 700000.000000|1400000.000000 to a 1 x 2 tile.
Since the bounding box is not a square, which would explain why mod_tile is rendering two tiles instead the single tile. I can see that gen_tile.cpp is responsible for setting this non-square bounding box on this line https://github.com/openstreetmap/mod_tile/blob/f28cda992077c38684628cd764742223ab10a3ec/src/gen_tile.cpp#L148

My problem.
When requesting http://localhost/tile/0/0/0.png this only delivers the "northernmost" of the two tiles ie bbox(0 700000,700000 14000000). However, my actual data extent (Wales) is located in the southernmost of the two tiles within bbox(0 0, 700000 700000).

image

Forgive me, I'm new to map tiling, with webmercator, the bbox is a square, ie x axis and y axis are equal, but the BNG extent is not a square, therefore, two queries:

  1. Is there anything in the configuration somewhere that I can change to deliver a 1x1 tile when http://localhost/tile/0/0/0.png is made?

  2. If there's no configuration option, would editing the gen_tile.cpp source be enough to deliver a square tile, see below example. Or am I missing something?

		prj->bound_x0 = 0;
		prj->bound_y0 = 0;
		prj->bound_x1 = 1400000;
		prj->bound_y1 = 1400000;
		prj->aspect_x = 1;
		prj->aspect_y = 1;

Thanks for any tips on where to go next.

Lenguaje dominante
C++
Estrellas
318
Forks
199
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de openstreetmap/mod_tile

Todos los issues de openstreetmap/mod_tile

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.