Я был вдохновлен замечательной серией отображаемых карт D3 here от maptimelex. Я пытаюсь воспроизвести его, но с использованием карты страны Гаити, а не штата Кентукки.Простая D3 Карта страны
См. Мой JSFiddle here.
Я использую файл JSON с простыми границами Гаити. Он не включает никаких административных границ (отделов, коммун и т. Д.). Кажется, что карта не отображается должным образом, и я не уверен, в чем проблема.
Я получаю ошибки, предполагающие, что файл JSON не загружается и не отображается должным образом. Одна ошибка говорит: «XMLHttpRequest не может загружаться: запросы на кросс-начало поддерживаются только для схем протокола: http, data, chrome, chrome-extension, https, chrome-extension-resource.» Другая ошибка говорит: «Uncaught TypeError: Невозможно прочитать свойства« null ».
Вот мой код JavaScript:
// set height and width of viz
var width = window.innerWidth,
height = window.innerHeight;
// create svg for viz
var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
// define JSON map data
d3.json("https://gist.github.com/29a1f4a91c1c8d615595.git", function (json) {
// create a first guess for the projection
var center = d3.geo.centroid(json);
var scale = 150;
var offset = [width/2, height/2];
var projection = d3.geo.mercator()
.center(center)
.rotate([85.8, 0])
.scale(scale)
.translate(offset);
var geoPath = d3.geo.path()
.projection(projection);
svg.append("g")
.selectAll("path")
.data(json.coordinates)
.enter()
.append("path")
.attr("d", geoPath);
});
Это отлично работает - спасибо. Я вижу сейчас. Однако у меня все еще есть проблема, если я попытаюсь загрузить JSON локально (т. Е. Haiti.json в том же каталоге, что и haiti.html). Я получаю сообщение об ошибке в консоли JS: «XMLHttpRequest не может загрузить файл: ///Users/matt/Desktop/haiti/haiti.json. Запросы на кросс-начало поддерживаются только для схем протокола: http, data, chrome, chrome-extension , https, chrome-extension-resource. " Если я связываюсь с JSON, хранящимся на сервере (т. Е. Http: //), то он работает. Любая идея, почему это так и как я могу заставить ее работать с локально сохраненным JSON? – mattbowlby
@mattbowlby, похоже, что вы просто запускаете это с локального диска. Вам необходимо обслуживать контент с веб-сервера. См. Дальнейшее объяснение [здесь] (http://stackoverflow.com/questions/20041656/xmlhttprequest-cannot-load-file-cross-origin-requests-are-only-supported-forhh) – Mark
Благодарим вас за объяснение. Совершенно ясно. – mattbowlby