Я использую библиотеку D3.js для создания карт из шейп-файлов США. Я ищу, чтобы создать всю карту США, что не представляет проблемы, и карту для каждого штата.Оказание только части карты топойсона с использованием D3.js
В моем рабочем потоке используются данные переписи, которые были изменены по необходимости ogr2ogr в командной строке, а затем преобразованы в topojson или geojson на shpescape.com из-за ошибок в загрузке модуля topojson (см. Ниже для редактирования решение этой конкретной проблемы).
Мой вопрос скорее практический вопрос, чем все остальное - когда представлено с этим кодом (моделируемой прочь http://bl.ocks.org/mbostock/4707858):
var width = 640,
height = 500;
var projection = d3.geo.albers();
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("mt_geo.json", function(error, mt_topo) {
var states = topojson.feature(mt_topo, mt_topo.objects.states),
state = states.features.filter(function(d) { return d.id === 34; })[0];
projection
.scale(1)
.translate([0,0]);
var b = path.bounds(state),
s = .95/Math.max ((b[1][0]-b[0][0])/width, (b[1][1]-b[0][1])/height),
t = [(width-s*(b[1][0]+b[0][0]))/2, (height-s*(b[1][1]+b[0][1]))/2];
projection
.scale(s)
.translate(t);
svg.append("path")
.datum(states)
.attr("class", "feature")
.attr("d", path);
svg.append("path")
.datum(topojson.mesh(us, us.objects.states,function(a, b) {return a !== b;}))
.attr("d", path);
svg.append("path")
.datum(state)
.attr("class", "outline")
.attr("d", path);
не только бросить ошибку на «вар состояний» линии в котором говорится: «Невозможно прочитать тип свойства неопределенным», но я также не знаю, что я должен переходить в анонимную функцию, или о том, что должно ссылаться на mt_topo.objects.states. Нет никакой хорошей документации по этому виду GIS. У всех карт переписи есть «государственные» функции? Вы теряете эту информацию при сжатии .shp в topojson?
Просто, если d3.json принимает (объект, функция (ошибка, json)), будет ли пример того, что работает на самом деле?
EDIT: обходного пути WINDOWS 7 идиосинкразии -----
Большинство учебников посоветует использовать модуль из Node.js, но я на Windows7 и каноническое командной строки «НПМ установки -g topojson «не удается» при контекстации ». Создатель прислал мне хороший link, чтобы обойти эту проблему.
Это важно, потому что в командной строке для topojson есть флаг, в котором вы можете упаковать существующие функции в geojson в доступный объект в topojson. Например, приведенный выше код использует «состояния» в topojson - то, что не имеет смысл и недоступные, если не использовать следующую команду:
topojson -o us.topojson -- states=us_states.json
Пространства между двойным дефисом и государство имеет важное значение. Затем вы можете получить доступ к состояниям через us.objects.states, как показано в исходном коде выше.
Вы посмотрели [учебник] (http://bost.ocks.org/mike/map/)? Атрибуты зависят от того, что находится в данных, то есть полностью определяется пользователем. –
@LarsKotthoff - да, я прочитал учебник довольно широко. Я думаю, что я понял проблемы с областью; как вы сказали, это только местозаполнитель. Моя оригинальная проблема становится яснее. Спасибо за вашу помощь. – kgilvi3
@ kgilvi3: если вы нашли способ обойтись, пожалуйста, поделитесь ответом, мы будем рады +1 ему. – Hugolpz