react d3 经纬度网格的间隔调整
react 我使用d3 网格化中国地图,但是地图太小了,网格很大(长宽很大):
import React, { useEffect, useRef } from <span style="color:#abe338">"react"</span><span style="color:#d4d0ab">;</span>
import * as d<span style="color:#f5ab35">3</span> from <span style="color:#abe338">"d3"</span><span style="color:#d4d0ab">;</span>
import chinaData from <span style="color:#abe338">"./china.json"</span><span style="color:#d4d0ab">;</span>
const GridMap = () => {
const svgRef = useRef(<span style="color:#ffa07a">null</span>)<span style="color:#d4d0ab">;</span>
useEffect(() => {
const svg = d3.select(<span style="color:#ffa07a">svgRef.current</span>)<span style="color:#d4d0ab">;</span>
// 定义地理投影
const projection = d3.geoMercator()
.fitSize([<span style="color:#f5ab35">500</span>, <span style="color:#f5ab35">500</span>], chinaData)<span style="color:#d4d0ab">;</span>
// 创建路径生成器
const path = d3.geoPath().projection(<span style="color:#ffa07a">projection</span>)<span style="color:#d4d0ab">;</span>
// 绘制地图路径
svg.selectAll(<span style="color:#abe338">"path"</span>)
.data(<span style="color:#ffa07a">chinaData.features</span>)
.enter()
.append(<span style="color:#abe338">"path"</span>)
.attr(<span style="color:#abe338">"d"</span>, path)
.attr(<span style="color:#abe338">"stroke"</span>, <span style="color:#abe338">"#888"</span>)
.attr(<span style="color:#abe338">"fill"</span>, <span style="color:#abe338">"none"</span>)<span style="color:#d4d0ab">;</span>
// 创建网格
const grid = d3.geoGraticule()<span style="color:#d4d0ab">;</span>
// 绘制网格路径
svg.append(<span style="color:#abe338">"path"</span>)
.datum(<span style="color:#ffa07a">grid</span>())
.attr(<span style="color:#abe338">"d"</span>, path)
.attr(<span style="color:#abe338">"stroke"</span>, <span style="color:#abe338">"#ddd"</span>)
.attr(<span style="color:#abe338">"fill"</span>, <span style="color:#abe338">"none"</span>)<span style="color:#d4d0ab">;</span>
}, [])<span style="color:#d4d0ab">;</span>
return (
<svg ref={svgRef} width={<span style="color:#f5ab35">500</span>} height={<span style="color:#f5ab35">500</span>}></svg>
)<span style="color:#d4d0ab">;</span>
}<span style="color:#d4d0ab">;</span>
export default GridMap<span style="color:#d4d0ab">;</span>解决方法:
1.调整地图svg的大小:
<svg ref={svgRef} width={800} height={800}></svg>2.调整网格间距的比例:(如果10太大,就继续调整为5,4, 3...)
const grid = d3.geoGraticule().step([10, 10]); // 调整 step 的值来改变网格的间隔3.调整投影的距离:
const projection = d3.geoAlbers().fitSize([500, 500], chinaData); // 尝试不同的投影方式