Как исправить неправильный рендеринг GeoJSON в D3.js
При попытке визуализировать данные geoJSON в D3.js нередко можно столкнуться с расхождения между ожидаемым и фактическим рендерингом. Одна конкретная проблема возникает, когда в выводе вместо предполагаемых географических объектов отображается большой черный прямоугольник.
Анализ проблемы
После проверки кода, представленного в вопросе, он становится Очевидно, что ошибка заключается в порядке намотки координат. D3.js использует эллипсоидальную математику, которая требует определенного порядка намотки координат. К сожалению, файл geoJSON содержит смесь порядков намотки как «по часовой стрелке», так и «против часовой стрелки», что приводит к неправильному рендерингу.
Решение
Чтобы исправить это Проблема, необходимо убедиться, что все координаты в файле geoJSON имеют правильный порядок обхода. Этого можно добиться вручную, изменив порядок координат или используя такую библиотеку, как turf.js, которая предоставляет удобный метод перемотки объектов.
Пример кода
Использование turf.rewind() для исправления порядка намотки:
var fixed = features.map(function(feature) {
return turf.rewind(feature,{reverse:true});
});
Дополнительные соображения
Хотя исправление порядка намотки решает проблему черного прямоугольника, стоит отметить еще одну особенность D3.js. В отличие от спецификации geoJSON, D3.js использует противоположный порядок обхода (против часовой стрелки по часовой стрелке и наоборот). В результате может потребоваться изменить порядок перемотки перед перемоткой, чтобы обеспечить правильную визуализацию.
Улучшенная визуализация
Помимо исправления порядка перемотки, настройка Настройки проекции могут улучшить визуализацию, разместив функции в отведенном пространстве. Этого можно добиться с помощью метода fitSize для масштабирования и перевода объектов:
// Fit the features to the screen
var projection = d3.geoMercator().fitSize([width, height], features);
Следуя этим шагам, вы можете исправить некорректный рендеринг данных geoJSON в D3.js и добиться точной визуализации желаемые географические объекты.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3