D3 Geojson 地图不会显示

大夫

我正在尝试从 Geojson 文件中显示 DMA 的地图,但该地图无法加载。我相信这是一个缩放/定位问题,但我发现的修复方法都没有奏效。寻找任何帮助。

var width = 960
        var height = 500

        var canvas = d3.select("body")
            .append("svg")
            .attr("width", width)
            .attr("height", height)


        d3.json("nielsenDMA.json", function(error, data) {
            if(error) throw error;

            var projection = d3.geoMercator().fitSize([width, height], geojson);
            var path = d3.geoPath().projection(projection);

            g.selectAll("path")
                .data(data.features)
                .enter()
                .append("path")
                .style("fill", "red")
                .style("stroke-width", "1")
                .style("stroke", "black");


        });
托雷索马尔

如果没有 json 文件的示例或您正在使用的 d3 版本,很难理解地图渲染失败的原因,因此我将假设以下内容,我认为您可能想要使用类似于此文件一并且您使用的是最新的 d3 版本。d3.jsond3 v5 中函数只是一个解析实用程序,fetch如文档所解释那样构建在 of 之上

fetch() 方法接受一个强制参数,即您要获取的资源的路径。它返回一个 Promise,该 Promise 解析为对该请求的响应,无论它是否成功。您还可以选择传入一个 init 选项对象作为第二个参数(请参阅请求)。

重要的部分是它返回 a Promise,现在让我们看看文档d3.json

d3.json(input[, init])

获取指定输入 URL 处的 JSON 文件。如果指定了 init,它会被传递给底层的 fetch 调用。

第二个可选参数是一个 init 对象,它允许您使用 fetch 请求控制许多不同的设置。

那么为什么您提供的代码不起作用?那么您提供的回调根本没有被调用。它被作为函数的第二个参数传递,它根本不会做任何事情。

获取数据的正确方法是使用Promise函数返回的值:

d3.json("url-to-retrieve")
  .then(data => {
     console.log(data);
  })
  .catch(err => {
     console.log(err);
  });

考虑到这一点,我们只需要对数据使用正确的投影,并注意您使用的是 topojson 还是 geojson 文件。

在这种情况下,这个 geojson 文件适用于geoMercator投影。

d3.json("url-to-retrieve")
.then(data => {
  var width = 960,
    height = 500;
  // Create a projection fitted to our width/height
  var projection = d3.geoMercator() 
    .fitSize([width, height], data);
  // Creates a new geographic path generator
  var path = d3.geoPath()
    .projection(projection);

  var svg = d3.select("body")
    .append("svg")
    .attr("width", width)
    .attr("height", height)

  svg.append("rect")
    .attr("class", "background")
    .attr("fill", "#cacaca")
    .attr("width", width)
    .attr("height", height);

  svg.append("g")
    .attr("id", "dmas")
    .selectAll("path")
    .data(data.features)
    .enter()
    .append("path")
    .attr('fill', 'white')
    .attr('stroke', '#222')
    .attr('stroke-width', '2')
    .attr("d", path);

})
.catch(err => {
  console.log(err);
});

这是上面代码jsfiddle

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

D3 JS-GeoJson(美国地图)-未加载

来自分类Dev

使用D3.js和GeoJson在地图上的州显示一些文本

来自分类Dev

D3-较大的GeoJSON文件无法使用投影正确显示绘制地图

来自分类Dev

使用D3.js和GeoJson在地图上的州显示一些文本

来自分类Dev

专注于D3.js地图中的geojson

来自分类Dev

D3中的GeoJSON:路径未绑定到数据

来自分类Dev

D3中的GeoJSON:路径未绑定到数据

来自分类Dev

使用D3渲染geoJSON,使用imageOverlay渲染Leaflet

来自分类Dev

尝试使用 D3 创建地图,但未显示

来自分类Dev

标签不会显示在d3力图上

来自分类Dev

D3地图投影不显示地图

来自分类Dev

如何在传单地图上打印/显示/绘制MultiPolygon GeoJSON

来自分类Dev

在Leaflet中显示来自geojson的地图时设置缩放

来自分类Dev

在LeafLet地图上显示jQuery Dynamic GeoJSON内容

来自分类Dev

GeoJSON要素坐标未显示在OpenLayers地图上

来自分类Dev

OpenLayer 6.3.1问题在地图上显示GeoJson数据

来自分类Dev

来自GeoJSON数据的HIghcharts地图显示得太小

来自分类Dev

GeoJSON要素坐标未显示在OpenLayers地图上

来自分类Dev

从 GeoJson 文件中显示一个地图标记

来自分类Dev

d3.js - D3 地图未显示在中国城市数据集中

来自分类Dev

更改地图D3的颜色

来自分类Dev

topojson / D3 /经度+纬度的地图

来自分类Dev

D3 + Google地图+多点路径

来自分类Dev

D3 + Google地图+多点路径

来自分类Dev

topojson / D3 /经度+纬度的地图

来自分类Dev

无法在D3 / Leaflet应用程序中绘制GeoJSON点

来自分类Dev

D3 V6和JavaScript-GeoJSON填充在路径之外“溢出”

来自分类Dev

在D3中,如何为geojson要素集合中的要素添加标签

来自分类Dev

如何为本地geojson文件绘制d3气泡图

Related 相关文章

热门标签

归档