使用 geojson 地图仅在一个轴上调整 d3JS 中的投影大小
Resize projection in d3JS in only one axis with a geojson map
我有一张用 d3js 显示的国家地图。我无法成功让它与这个投影一起工作:
var projection = d3.geoConicConformal()
.center([2.454071, 46.279229])
.scale(0.1)
.translate([width / 2, height / 2]);
path.projection(projection);
(即使其他地图有效)
所以我正在尝试使用 geoIdentity 来避免定位:
var projection = d3.geoIdentity().reflectY(true).fitExtent([[100, 100], [width-100, height-100]], geojson); //.fitSize([width,height],geojson)
var path = d3.geoPath(projection);
这种工作,但问题是我的地图比它应该的更宽。 (在gesojson.io中地图似乎有很好的比例):
所以我想减少宽度(X轴)来改变比例。我尝试使用 fitExtend 和 fitSize,但没有任何效果,是否有解决方案?
为安德鲁编辑:
这是我最初使用 geoConicalConformal(是否使用 fitsize/fitextend)的结果:
我发现了一个非常有效的技巧。请记住,这只是一个“技巧”。
您必须为每个路径添加变换 scaleX(如果形状太宽则 < 1)样式属性:
deps.selectAll("path")
.data(geojson.features)
.enter()
.append("path")
.attr('class', 'department')
.attr("d", path)
.attr('id', d => "d" + d.properties.dep)
.style('transform', 'scaleX(0.7)')
对我来说,0.7 是完美的,你必须在你的项目中调整这个参数。然后,调整 fitExtend 使整个形状向右移动,因为 scaleX < 1 同时使形状向左移动。例如:
var projection = d3.geoIdentity().reflectY(true).fitExtent([[width * 0.3, height * 0.1], [width * 1.3, height * 0.9]], geojson);
我有一张用 d3js 显示的国家地图。我无法成功让它与这个投影一起工作:
var projection = d3.geoConicConformal()
.center([2.454071, 46.279229])
.scale(0.1)
.translate([width / 2, height / 2]);
path.projection(projection);
(即使其他地图有效)
所以我正在尝试使用 geoIdentity 来避免定位:
var projection = d3.geoIdentity().reflectY(true).fitExtent([[100, 100], [width-100, height-100]], geojson); //.fitSize([width,height],geojson)
var path = d3.geoPath(projection);
这种工作,但问题是我的地图比它应该的更宽。 (在gesojson.io中地图似乎有很好的比例):
所以我想减少宽度(X轴)来改变比例。我尝试使用 fitExtend 和 fitSize,但没有任何效果,是否有解决方案?
为安德鲁编辑:
这是我最初使用 geoConicalConformal(是否使用 fitsize/fitextend)的结果:
我发现了一个非常有效的技巧。请记住,这只是一个“技巧”。
您必须为每个路径添加变换 scaleX(如果形状太宽则 < 1)样式属性:
deps.selectAll("path")
.data(geojson.features)
.enter()
.append("path")
.attr('class', 'department')
.attr("d", path)
.attr('id', d => "d" + d.properties.dep)
.style('transform', 'scaleX(0.7)')
对我来说,0.7 是完美的,你必须在你的项目中调整这个参数。然后,调整 fitExtend 使整个形状向右移动,因为 scaleX < 1 同时使形状向左移动。例如:
var projection = d3.geoIdentity().reflectY(true).fitExtent([[width * 0.3, height * 0.1], [width * 1.3, height * 0.9]], geojson);