Cómo corregir la representación GeoJSON incorrecta en D3.js
Al intentar visualizar datos geoJSON en D3.js, no es raro encontrar discrepancias entre la representación esperada y la real. Un problema particular surge cuando el resultado muestra un gran rectángulo negro en lugar de las características geográficas previstas.
Análisis del problema
Al inspeccionar el código proporcionado en la pregunta, se convierte en Es evidente que el error reside en el orden de enrollado de las coordenadas. D3.js utiliza matemáticas elipsoidales, que requieren un orden de bobinado específico para las coordenadas. Desafortunadamente, el archivo geoJSON contiene una mezcla de órdenes de bobinado "en el sentido de las agujas del reloj" y "en el sentido contrario a las agujas del reloj", lo que provoca una representación incorrecta.
Solución
Para rectificar esto problema, es necesario asegurarse de que todas las coordenadas en el archivo geoJSON tengan el orden de enrollado correcto. Esto se puede lograr manualmente reordenando las coordenadas o usando una biblioteca como turf.js, que proporciona un método conveniente para rebobinar funciones.
Ejemplo de código
Utilizando el Método turf.rewind() para corregir el orden de bobinado:
var fixed = features.map(function(feature) {
return turf.rewind(feature,{reverse:true});
});
Consideraciones adicionales
Si bien corregir el orden de bobinado resuelve el problema del rectángulo negro, vale la pena señalar otra peculiaridad en D3.js. A diferencia de la especificación geoJSON, D3.js utiliza el orden de bobinado opuesto (en sentido contrario a las agujas del reloj y viceversa). Como resultado, podría ser necesario invertir el orden de bobinado antes de rebobinar para garantizar una representación adecuada.
Visualización mejorada
Además de corregir el orden de bobinado, ajustar el La configuración de proyección puede mejorar la visualización al ajustar las funciones dentro del espacio designado. Esto se puede lograr utilizando el método fitSize para escalar y traducir las funciones:
// Fit the features to the screen
var projection = d3.geoMercator().fitSize([width, height], features);
Al seguir estos pasos, puede corregir la representación incorrecta de los datos geoJSON en D3.js y lograr una visualización precisa de las características geográficas deseadas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3