简单的 D3 国家地图
Simple D3 Map of Country
here from maptimelex 精彩的 D3 系列地图给我带来了灵感。我正在尝试复制它,但使用的是海地国家地图而不是肯塔基州地图。
请看我的 JSFiddle here。
我正在使用带有海地简单边框的 JSON 文件。它不包括任何行政边界(部门、公社等)。地图似乎没有正确呈现,我不确定是什么问题。
我收到错误提示 JSON 文件未正确加载或呈现。一个错误是:"XMLHttpRequest cannot load: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource." 另一个错误是:"Uncaught TypeError: Cannot read property 'coordinates' of 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);
});
错误是说您无法加载 https://gist.github.com/29a1f4a91c1c8d615595.git 因为它来自不同的来源并且不支持 CORS。您可以尝试在本地下载 JSON 文件并将您的脚本指向该文件而不是远程位置。
除了@noveyak 的回答之外,您的 JSON 包含一个 GeometryCollection
,因此 属性 的 .geometries
而不是 .coordinates
。另外,您的比例太小,不需要旋转。
放在一起:
// create a first guess for the projection
var center = d3.geo.centroid(json);
var scale = 8000;
var offset = [width / 2, height / 2];
var projection = d3.geo.mercator()
.center(center)
.scale(scale)
.translate(offset);
var geoPath = d3.geo.path()
.projection(projection);
svg.append("g")
.selectAll("path")
.data(json.geometries) //<-- geometries
.enter()
.append("path")
.attr("d", geoPath);
已更新 example。
here from maptimelex 精彩的 D3 系列地图给我带来了灵感。我正在尝试复制它,但使用的是海地国家地图而不是肯塔基州地图。
请看我的 JSFiddle here。
我正在使用带有海地简单边框的 JSON 文件。它不包括任何行政边界(部门、公社等)。地图似乎没有正确呈现,我不确定是什么问题。
我收到错误提示 JSON 文件未正确加载或呈现。一个错误是:"XMLHttpRequest cannot load: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource." 另一个错误是:"Uncaught TypeError: Cannot read property 'coordinates' of 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);
});
错误是说您无法加载 https://gist.github.com/29a1f4a91c1c8d615595.git 因为它来自不同的来源并且不支持 CORS。您可以尝试在本地下载 JSON 文件并将您的脚本指向该文件而不是远程位置。
除了@noveyak 的回答之外,您的 JSON 包含一个 GeometryCollection
,因此 属性 的 .geometries
而不是 .coordinates
。另外,您的比例太小,不需要旋转。
放在一起:
// create a first guess for the projection
var center = d3.geo.centroid(json);
var scale = 8000;
var offset = [width / 2, height / 2];
var projection = d3.geo.mercator()
.center(center)
.scale(scale)
.translate(offset);
var geoPath = d3.geo.path()
.projection(projection);
svg.append("g")
.selectAll("path")
.data(json.geometries) //<-- geometries
.enter()
.append("path")
.attr("d", geoPath);
已更新 example。