Obtén los límites de featureCollection en d3.
Desde este gist https://gist.github.com/mbertrand/5218300 obtuve un código de ejemplo para dibujar algunas características, que adapté para usar mi GeoJSON.
var features = [
{ "type": "Feature", "properties": {}, "geometry": { "type": "MultiLineString", "coordinates": [ [ [ 13.3921498, 52.476596, 31.64 ], [ 13.393036, 52.4765996, 31.6 ], [ 13.3934, 52.4765511, 31.87 ], [ 13.3935847, 52.4765058, 32.37 ], [ 13.3936657, 52.4764735, 32.16 ], [ 13.3936851, 52.4764164, 32.04 ], [ 13.3936229, 52.4761477, 32.05 ], [ 13.3934819, 52.4758929, 32.77 ], [ 13.3932546, 52.4756262, 32.56 ], [ 13.3930283, 52.4754013, 32.51 ], [ 13.3927091, 52.4751468, 32.64 ], [ 13.3923208, 52.4749337, 32.63 ], [ 13.3919094, 52.4747933, 33.13 ], [ 13.3917874, 52.4747948, 32.61 ], [ 13.391795, 52.4747857, 32.75 ], [ 13.3918985, 52.4747159, 33.03 ], [ 13.3921305, 52.4748218, 32.9 ], [ 13.3924295, 52.4749522, 32.21 ], [ 13.392583, 52.475059, 32.49 ], [ 13.3931511, 52.4753106, 32.74 ] ] ] } },
{ "type": "Feature", "properties": {}, "geometry": { "type": "MultiLineString", "coordinates": [ [ [ 13.3931511, 52.4753106, 32.74 ], [ 13.3934351, 52.475342, 32.43 ] ] ] } }
];
var bounds = d3.geo.bounds(features),
topLeft = bounds[0],
bottomRight = bounds[1];
Sin embargo, al depurar el script, topLeft
y bottomRight
son NaN
.
Supongo que esto se debe a la estructura de geometría más compleja de mi JSON, que consta de geometrías de MultiLineString
, no solo simples características de Point
. ¿Alguna idea de cómo obtener los límites aquí?
davy.ai
Como se indica en la pregunta, el problema con la salida
NaN
paratopLeft
ybottomRight
probablemente se debe a las geometríasMultiLineString
complejas en el archivo GeoJSON.Para obtener los límites de estas geometrías más complejas, puedes utilizar el método
d3.geo.path()
para convertir las características del GeoJSON a coordenadas de pantalla, y luego utilizard3.extent()
para calcular la extensión de esas coordenadas de pantalla.Por ejemplo:
Este código utiliza
Array.reduce()
para iterar a través de cada característica en el arreglofeatures
, utilizandopath.bounds()
para calcular los límites de la característica en coordenadas de pantalla. El resultado se fusiona con los límites existentes utilizandoMath.min()
yMath.max()
.El valor inicial de la variable
bounds
se establece en[[Infinity, Infinity], [-Infinity, -Infinity]]
para asegurar que cualquier límite calculado sea menor o mayor que los límites iniciales, respectivamente.Luego puedes utilizar la variable
bounds
para establecer las variablestopLeft
ybottomRight
, de la siguiente manera:Esto debería darte los límites correctos de las características del GeoJSON.