作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 d3.js 制作 Choropleth,但我一开始就被卡住了。我找到了一个 Shapefile 并从中生成了 GeoJSON 和 TopoJson 文件,就像 here .该 map 使用阿尔伯斯-西伯利亚投影。我对这个投影的发现:
投影:Albers 等积圆锥
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Choropleth</title>
<script type="text/javascript" src="d3/d3.v3.js"></script>
<script type="text/javascript" src="d3/queue.v1.min.js"></script>
<script type="text/javascript" src="d3/topojson.v0.min.js"></script>
</head>
<body>
<h1>My Choropleth</h1>
<script type="text/javascript">
var width = 960,
height = 500;
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
var pr = d3.geo.albers()
.center([105,0])
.parallels([52, 64])
.scale(1000);
var path = d3.geo.path().projection(pr);
d3.json("map_rus_topo.json", function(error, map) {
svg.append("path")
.datum(topojson.object(map, map.objects.map_rus))
.attr("d", path);
});
</script>
</body>
最佳答案
第一个问题是您的 GeoJSON 文件不是以度为单位的 [longitude°, latitude°],也称为 EPSG:4326 or WGS 84。 .要将您的 GeoJSON 文件转换为 WGS 84,您首先需要创建一个投影文件,例如 albers.prj
这样您就可以告诉 OGR 源投影是什么。
+proj=aea +lat_1=52 +lat_2=64 +lat_0=0 +lon_0=105 +x_0=18500000 +y_0=0 +ellps=krass +units=m +towgs84=28,-130,-95,0,0,0,0 +no_defs
ogr2ogr -f GeoJSON -s_srs albers.prj -t_srs EPSG:4326 map_rus_wgs84_geo.json map_rus_geo.json
topojson -o map_rus_wgs84_topo.json -s 1e-7 -- russia=map_rus_wgs84_geo.json
var projection = d3.geo.albers()
.rotate([-105, 0])
.center([-10, 65])
.parallels([52, 64])
.scale(700)
.translate([width / 2, height / 2]);
关于使用 d3.js 和 TopoJSON 绘制 map ,阿尔伯斯西伯利亚投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083999/
我是一名优秀的程序员,十分优秀!