2016-05-03 3 views
0

Я пытаюсь получить пример d3 Zoom to Bounding Box II (см. Здесь: https://bl.ocks.org/mbostock/raw/9656675/), работающий на карте мира, а не на карте США, согласно примеру , К сожалению, масштабирование является неустойчивым. Для некоторых стран он работает нормально; для других он приближается к Тихому океану.d3: Увеличить для Bounding Box II для стран вместо штатов

Я бы JSFiddle мой код, я не могу загрузить файл topojson из удаленного места. Соответствующая функция, которую я редактировал в приведенном выше примере, приведен ниже:

var projection = d3.geo.mercator() // instead of albersUsa 
    .scale(100) 
    .translate([width/2, height/2]); 

d3.json("world-110m.json", function(error, world) { //world json 
    if (error) throw error; 

    g.selectAll("path") 
    .data(topojson.feature(world, world.objects.countries).features) //traverse world objects instead of state objects 
    .enter().append("path") 
    .attr("d", path) 
    .attr("class", "feature") 
    .on("click", clicked); 

    g.append("path") 
     .datum(topojson.mesh(world, world.objects.countries, function(a, b) { return a !== b; })) // append world objects not states 
     .attr("class", "mesh") 
     .attr("d", path); 
}); 

Любая помощь оценивается.

ПРИМЕЧАНИЕ: Я только понял, что масштабирование является неустойчивым для некоторых состояний. Например, попробуйте нажать на VT или NH. Я напишу ошибку в GitHub. Между тем какие-то идеи?

+0

Возможно ли это из вашей версии «world-110m.json»? Я воссоздал вашу карту здесь с моей версией мира json, и, похоже, она работает хорошо. С какой конкретной страной вы столкнулись с проблемой? http://plnkr.co/edit/L4U1fRXq9wre1DrigkLJ?p=preview Вы можете скачать карту мира из плунжера. –

+0

Вы могли решить это? –

+0

Я должен был обновиться раньше. Я опубликовал сообщение о том, что Git и Mike Bostock выпустили исправление в течение нескольких часов: https://github.com/mbostock/d3/issues/2819. Оказывается, я запускал (слегка) устаревшую версию d3. Это и он изменил масштаб в границах var. См. Его ответ по ссылке выше. – dylanmac

ответ

0

Я предполагаю, что отвечу на свой вопрос (даже если я не тот, кто его решил) является кошерным.

Майк Босток сказал, что я запускал немного устаревшую версию d3. Выполнить по крайней мере D3 3.5.7, а затем обновить границы вар:

scale = Math.max(1, Math.min(8, 0.9/Math.max(dx/width, dy/height)))

Он установил примеры на своем сайте тоже.

Смежные вопросы