проблема с альберами проекции d3, создающими клетчатую карту

Я преобразовываю файл карты в Атласе США Бостока (файл shp нефильтрованных штатов США) в topojson. И я остановился на этой карте. Кто-нибудь знает, почему?

введите здесь описание изображения

Мой код проекции: var svg = d3.select("#interactive").insert("svg") .attr("width", w) .attr("height", h);

var projection = d3.geo.albers().scale([600]);

var path = d3.geo.path().projection(projection);

d3.json("us-states.json", function(error, us) {
  if (error) return console.error(error);

  svg.append("path")
      .datum(topojson.mesh(us))
      .attr("d", path);
});

Исходные файлы, которые я пробовал (делал то же самое): 12, преобразованные файлы: 12,


person Union find    schedule 20.07.2014    source источник
comment
Солнечные пятна? Не могу сказать, не зная, что ты делаешь.   -  person Lars Kotthoff    schedule 20.07.2014
comment
Похоже, что файл shp (что бы это ни было) содержит сегменты государственной границы (например, граница между Техасом и Оклахомой, граница между Техасом и Нью-Мексико), в то время как topojson ожидает полные государственные границы (например, границу Техаса, всю округу) . Могут быть и другие проблемы.   -  person Beta    schedule 20.07.2014
comment
@LarsKotthoff Я показал свой код. Я просто использую проекцию. Я пробовал другие типы проекций и все равно получаю ту же ошибку.   -  person Union find    schedule 20.07.2014
comment
Вероятно, это как-то связано с исходными данными/процессом преобразования — не могли бы вы опубликовать и это, пожалуйста?   -  person Lars Kotthoff    schedule 20.07.2014
comment
Я добавил ссылки. Процесс преобразования просто: topojson -o output.jsonstates.shp или любой другой для файла. Я также пытаюсь использовать файлы из mapshaper.   -  person Union find    schedule 20.07.2014
comment
Как вы думаете, это может быть: .datum(topojson.mesh(us)) — неправильный способ отображения границ?   -  person Union find    schedule 20.07.2014
comment
Может fiddle.js если нужно   -  person Union find    schedule 20.07.2014
comment
@Beta Я пробовал несколько преобразованных файлов формы. Вы рекомендуете источник для создания этой карты в topojson?   -  person Union find    schedule 20.07.2014
comment
Можете ли вы уточнить, чего вы пытаетесь достичь? topojson.mesh(topology) возвращает один путь, представляющий все границы в этой топологии как несколько открытых подпутей. Это именно то, что отображается на вашей карте, за исключением того, что ваша карта имеет стиль пути по умолчанию с черной заливкой и отсутствием обводки, что не имеет смысла для пути, который представляет только границы. Если вы просто хотите нарисовать границы, установите .style({fill:"none", stroke:"black"}); на пути. Если вы хотите, чтобы каждое состояние было отдельным заполненным путем, вам понадобится другой подход.   -  person AmeliaBR    schedule 21.07.2014
comment
@AmeliaBR Все, что я пытаюсь сделать, это взять файл shp/geojson, преобразовать в topojson (уже сделано до этого кода), а затем спроецировать как карту США, где каждый штат имеет один и тот же цвет, но границы второй цвет. Базовый :(   -  person Union find    schedule 21.07.2014
comment
Используемый вами метод только рисует границы, он не создает формы, которые вы можете заполнить. Если вы хотите заполнить их, используйте один из других методов для создания массива отдельных фигур.   -  person AmeliaBR    schedule 21.07.2014
comment
@AmeliaBR Если вы опубликуете, я приму ваш ответ. Спасибо.   -  person Union find    schedule 21.07.2014


Ответы (1)


Оказывается, так и должно быть!

Есть два исправления.

Чтобы отобразить границы, мы можем сохранить текущий код, но нам нужно установить заливку на none и просто стилизовать сами границы. Что-то вроде этого работает:

.states_borders{
stroke: #00001d;
  stroke-width: .5px;
  fill: white;
   /* stroke-dasharray: 1,1;  */
  stroke-linejoin: round;
  stroke-linecap: round;
}

Чтобы правильно отобразить сами состояния, нам нужно использовать topojson.feature для построения нашего объекта данных.

person Union find    schedule 21.07.2014