2014-10-08 5 views
1

Тестирование с помощью следующих образцов кода: http://dc-js.github.io/dc.js/vc/dc.js responive GeoJSON США карта

Я хотел бы, чтобы эта карта реагирует на размер контейнера/окна. Однако примеры, которые я видел, использовали топожион и SVG для масштабирования карты. http://techslides.com/demos/d3/d3-worldmap-boilerplate.html

Невозможно ли с Geojson обновить размер карты аналогичным образом?

d3.json("../geo/us-states.json", function (statesJson) { 
     usChart.width(990) 
       .height(500) 
       .dimension(states) 
       .group(stateRaisedSum) 
       .colors(d3.scale.quantize().range(["#E2F2FF", "#C4E4FF", "#9ED2FF", "#81C5FF", "#6BBAFF", "#51AEFF", "#36A2FF", "#1E96FF", "#0089FF", "#0061B5"])) 
       .colorDomain([0, 200]) 
       .colorCalculator(function (d) { return d ? usChart.colors()(d) : '#ccc'; }) 
       .overlayGeoJson(statesJson.features, "state", function (d) { 
        return d.properties.name; 
       }) 
       .title(function (d) { 
        return "State: " + d.key + "\nTotal Amount Raised: " + numberFormat(d.value ? d.value : 0) + "M"; 
       }); 

ответ

1

Вы можете использовать тот же подход, что и тот, с которым вы связались (techSlides).

Он состоит из замены целого svg на новый нарисованный после изменения размера окна. При перерисовке единственное, что меняется, это ширина и высота, которые вы используете в качестве размеров элемента svg.

Независимо от ваших данных GeoJson от TopoJson не влияет на это.

Более плавный вариант этой техники заключается в изменении размера существующего элемента svg при изменении размера окна, без выполнения перерисовки. Просто добавьте SVG viewBox и preserveAspectRatio="xMinYMin", чтобы сохранилась проекция внутри SVG.

Пример in this blog и его javascript.

+0

К сожалению, это изменяет размер контейнера, и карта не перерисовывается. Посмотрите на этот пример. http://bl.ocks.org/jczaplew/4444770, который также использует user2923767

+0

Вам нужно использовать 'viewBox' и' preserveAspectRatio'. Вот обновленная информация: https://gist.github.com/mef/566bc47c8939f69fda4f –

+0

Да. Спасибо. Я тоже видел этот код, но он также использует topojson.v0.min.js для перерисовки карты. Посмотрите на этом коде .data (topojson.object (США, us.objects.states) .geometries) \t Введите желанные(). Присоединять ("путь") \t \t .attr ("класс", "государство") \t \t .attr ("d", путь); \t}); – user2923767