Я получил некоторую помощь с предыдущим вопросом о том, как перевести мою карту на заданные значения долготы и широты, здесь: Как я могу использовать перевод SVG для центрирования проекции d3.js на заданные значения широты и долготы? Я написал метод, который перемещается в указанное место в заданном масштабе:
zoomTo: function(point, scale) {
var lat = -SFMap.projection(point)[0] * scale;
var lon = -SFMap.projection(point)[1] * scale;
var x = (SFMap.config.width / 2) + lat;
var y = (SFMap.config.height / 2) + lon;
SFMap.g
.transition()
.duration(500)
.attr("transform", "translate("+ x +","+ y +") scale("+ scale +")");
}
Я прекрасно могу «масштабировать» Европу, но когда я переезжаю в Джакарту, Индонезия, центральная точка четко лежит над океаном.
Лондон — SFMap.zoomTo([0.1062, 51.5171], 1300)
Джакарта – SFMap.zoomTo([106.7500, 6.1333], 1300);
И эта проблема подчеркивается, если я пробую Австралию - я ее даже не вижу.
Я должен отметить, что я использую d3 для визуализации проекции Меркатора и получения значений долготы и широты из поиска Google.
Пожалуйста, может кто-нибудь предложить, почему это происходит? Я знаю, что за кулисами много математики, но я надеялся, что d3 позаботится об этом.
Изменить:
Прочитав комментарий Пабло, я решил удалить из уравнения свой метод zoomTo()
и просто проверить, может ли d3 правильно center([106.7500, 6.1333])
работать на Jarkata при фиксированном scale(1000)
, но это не так; он все еще сбрасывает вас в океан.
SFMap.projection()
, потому что я полагал, что мне это не нужно, если я рассчитывал масштаб влияния на перевод в моем методе преобразования,zoomTo()
, как показано выше. Я изучу передачуscale
в проекцию, прежде чем использовать ее значения, когда вернусь домой с работы. Я отвечу соответственно. :) Большое спасибо. - person Check12   schedule 30.05.2013