2014-02-09 19 views
0

Я следую за Бостоком map tutorial с моим собственным data. Я понимаю, что проекция - это функция, которая принимает трехмерную координату lat/long и возвращает координату 2D x/y. Я также понимаю, что d3.geo.path обрабатывает беспорядочную работу с GeoJSON и преобразовывает ее в SVG. Я получаю, как вы передаете функцию проекции в качестве параметра d3.geo.path, чтобы рассказать ему, как проектировать 3D lat/long, описанный GeoJSON, в 2D SVG. Все идет нормально.Имея проблемы с масштабированием моей карты d3

Тем не менее, у меня много проблем с «увеличением масштаба» на моей карте с моей проекцией. Карта центрируется на соответствующей широте и долготе, используя свойство центра проекции. Я использую свойство translate для преобразования точки в центр элемента SVG. Однако, независимо от того, сколько я использую для масштабирования, карта никогда не становится больше или меньше. Я проверил ошибки в кости: я правильно сохраняю изменения, и они правильно обрабатываются. Ошибка связана с тем, как я использую масштаб.

Как увеличить?

window.onload = function() { 

    //Width and height 
    var width = 960, 
     height = 1160; 

    var svg = d3.select("body").append("svg") 
     .attr("width", width) 
     .attr("height", height); 

    //setting scale to numbers as high as 30000 and as low as 3 does not change my map 
    var projection = d3.geo.transverseMercator().translate([width/2, height/2]).scale(3).center(-90.088, 29.957); 

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

    d3.json("orleans.json", function(json) { 
     svg.selectAll("path") 
      .data(json.features) 
      .enter() 
      .append("path") 
      .attr("d", path); 
    }); 

}; 

ответ

1

d3.geo.path() не принимает никаких аргументов. Для того, чтобы установить проекцию на пути, используйте следующий код:

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

Другой вариант рассмотреть используют «preserveAspectRatio» и свойство «Viewbox» в SVG теге (Если ваша карта использует один):

svg preserveAspectRatio = "xMidYMid meet" viewBox = "0 0 500 200" id = "mapsvg"

Поднимая или опуская номера в окне просмотра, вы можете уменьшить или увеличить карту.

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