Картографирование школьных округов Небраски с помощью D3 v4 - базовый слой не отображается - PullRequest
0 голосов
/ 04 марта 2019

У меня проблемы с составлением карт школьных округов штата Небраска в D3 (v4).(См. bl.ock здесь .) Я могу сопоставить округа Небраски без проблем, но тот же код, измененный для школьных округов - и указывающий на файл TopoJSON школьного округа - дает мне пустую страницу.

Вот как я создал JSON, основываясь на прекрасных инструкциях Майка Бостока :

curl "https://www2.census.gov/geo/tiger/GENZ2017/shp/cb_2017_31_unsd_500k.zip" -o cb_2017_31_unsd_500k.zip

unzip -o cb_2017_31_unsd_500k.zip
shp2json cb_2017_31_unsd_500k.shp -o ne_district.json
ndjson-split "d.features" < ne_district.json > ne_district.ndjson
ndjson-map "d.id = d.properties.GEOID, d" < ne_district.ndjson > ne_district-id.ndjson
geo2topo -n districts=ne_district-id.ndjson > ne_district-id-topo.json

А вот мой прогноз:

var projection = d3.geoConicConformal()
   .parallels([40, 43])
   .rotate([100, 0])
   .scale(8000); 

Спасибо за вашзаранее помогите и извините за все, что я упустил!

1 Ответ

0 голосов
/ 04 марта 2019

Проблема в том, что вы еще не закончили настройку параметров проекции.Вы должны повернуть карту, как вы должны центрировать коническую проекцию вдоль оси 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...