使用 JS 和 geojson 文件创建纽约市行政区的 d3 地图
Creating a d3 map of nyc boroughs using JS and a geojson file
几周来,我一直在尝试创建一个 d3 映射,将教程与代码网格划分。这是我的 html 代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src= "d3.min.js">
Modernizr.load({
test: Modernizr.svg && Modernizr.inlinesvg,
yep : [ 'd3.min.js',
'js/script.js' ]
});
</script>
</head>
<body>
<script src="NYC_MapInfo.geojson"></script>
<script>
var width = 960,
height = 1160;
var projection = d3.geo.mercator()
.scale(500)
.translate([width / 2, height / 2]);
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("NYC_MapInfo.geojson", function(error, NYC_MapInfo) {
svg.append("path")
.datum(NYC_MapInfo.feature(NYC_MapInfo, NYC_MapInfo.objects))
.attr("d", path);
});
</script>
</body>
</html>
这是json file
的链接:
有人可以帮我修复代码以加载图像吗?
这里有一个链接可以帮助你查看代码:http://0.0.0.0:8000/nyc_zipmap.html
您正在从 GeoJSON 文件加载几何图形,因此您可以按照以下方式绘制这些多边形:
svg.selectAll("path")
.data(NYC_MapInfo.features)
.enter()
.append("path")
.attr("d", path);
此代码的作用是为 geojson 文件中"功能"下找到的每个元素创建路径。然后使用您已经拥有的路径函数正确绘制它们。
完成此操作后,您会发现您仍然看不到任何东西,这是因为您的地图以世界的错误部分为中心,因此纽约市在您的视口之外。您可以使用 d3 准确了解地图的定位位置以及必须缩放多少地图。但这有点复杂。因此,快速的解决方案是进一步放大地图。
var projection = d3.geo.mercator()
.scale(10000)
.translate([width / 2, height / 2]);
然后等待创建路径函数,直到加载 GeoJSON。因为这样你就可以用d3.geo.centroid函数找到它的中心。
var center = d3.geo.centroid(NYC_MapInfo);
projection.center(center);
var path = d3.geo.path().projection(projection);
显示 NYC 的完整代码是:
<script>
var width = 960,
height = 1160;
var projection = d3.geo.mercator()
.scale(10000)
.translate([width / 2, height / 2]);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("NYC_MapInfo.geojson", function(error, NYC_MapInfo) {
// after loading geojson, use d3.geo.centroid to find out
// where you need to center your map
var center = d3.geo.centroid(NYC_MapInfo);
projection.center(center);
// now you can create new path function with
// correctly centered projection
var path = d3.geo.path().projection(projection);
// and finally draw the actual polygons
svg.selectAll("path")
.data(NYC_MapInfo.features)
.enter()
.append("path")
.attr("d", path);
});
</script>
您可能需要摆弄投影中心和缩放才能正确显示它。查看此线程以获取有关如何使用代码执行此操作的更多详细信息。
相关文章:
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 如何在d3.js中返回路径的y坐标
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- 为什么我的d3.jsselectAll+过滤器没有过滤
- 使用D3.js计算带有字母间距的文本长度
- d3中堆栈函数和嵌套函数之间的差异
- D3.js模式不适用于弧形或圆环图
- d3.js Chord图的动态工具提示
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- D3嵌套组作为x轴
- d3.hexbin插件-动态定义颜色域以适应数据
- HTML5FileReader输出到D3.js图表
- 如何在d3上的图形中添加放大和缩小按钮
- 在对象数组中查找多个值的d3范围
- d3中的条件转换
- D3.js生成有效的SVG,但不显示任何内容
- d3.js:限制画笔的大小
- 使用 JS 和 geojson 文件创建纽约市行政区的 d3 地图