Проблема в том, что вы еще не закончили настройку параметров проекции.Вы должны повернуть карту, как вы должны центрировать коническую проекцию вдоль оси x.Но вы не центрировали карту по оси Y, она центрирована на экваторе.Вы
Для конической проекции вы можете сделать это одним из трех способов:
- Центрирование карты на центральной широте:
projection.center([0,y])
Вам не нужно использовать .center со значением x, потому что карта уже центрирована по x с помощью вращения, вращение и центрирование являются кумулятивными
- Повернуть карту нацентральная широта и долгота:
projection.rotate([-x,-y])
В конической проекции вращение на меридиане не деформирует карту (обычно), мы вращаемся отрицательно, поскольку мы перемещаем землю под себя,Эта опция немного искажает карту относительно других опций - это может быть предпочтительнее.
- Используйте проекцию перевода для центрирования карты
Самый простой способозначает перевод результата при автоматическом масштабировании (хотя вы можете сделать это и вручную) с помощью projection.fitSize
или projection.fitExtent
.Эти методы изменяют projection.scale и projection.translate.Как и в случае с центрированием .center, вам нужно сохранять вращение - в противном случае вы получите странный наклон к карте.Эти методы устанавливают значения translate и scale для соответствующих значений, чтобы область вашей карты содержала нужные объекты:
var featureCollection = topojson.feature(ne, ne.objects.districts);
projection.fitSize([width,height],featureCollection);
Эти методы должны принимать объекты, а не массивы, поэтому мы используем коллекцию featureCollection, а не объекты какмассив
Оба метода берут массив, определяющий размер для растягивания предоставленного объекта геоджона:
projection.fitSize([mapwidth,mapheight],geojsonObject)
projection.fitExtent([[left,top],[right,bottom]],geojsonObject)
Вот обновленный гист, используя fitSize.