You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建带ID的最优world.topo.json文件?基于Topojson@1.0需求

Got it, let's walk through how to create that lightweight, precise world-id.topojson file with the right ID properties to match your CSV country codes (FR, DE, GB, etc.). Here's a step-by-step approach tailored to your setup with topojson@1.0:

Step 1: Prep Your Shapefile (Critical for Matching IDs)

First, double-check your original shapefile's attribute table. You need a field that contains the exact 2-letter country codes matching your CSV (like ISO 3166-1 alpha-2 codes: FR, DE, GB). If your shapefile doesn't have this field:

  • Use a GIS tool like QGIS to add the code field manually, or join it with a reference CSV that maps shapefile attributes to ISO codes.
  • Without this matching field, you can't link the topojson to your data later—don't skip this!

Step 2: Convert Shapefile to Target Topojson with topojson@1.0

Since you're using topojson@1.0, the command syntax is a bit different from newer versions. Open your terminal, navigate to your shapefile's directory, and run this command (replace the placeholders with your actual details):

topojson -o world-id.topojson --id-property [YOUR_CODE_FIELD] --simplify-proportion 0.1 [YOUR_SHAPEFILE.shp]

Breakdown of the key flags:

  • -o world-id.topojson: Sets the output filename to your desired world-id.topojson
  • --id-property [YOUR_CODE_FIELD]: This is the magic! It tells topojson to use your shapefile's code field (e.g., iso_a2) as the id property for each country feature. This is exactly what lets you match to your CSV later.
  • --simplify-proportion 0.1: Balances file size and map precision. Adjust this value: lower = smaller file but less precision; higher = larger file but sharper borders. 0.1 is a good starting point.

Bonus: Tweak for Perfect Matching

  • If your shapefile's codes are lowercase but your CSV uses uppercase, add a quick transform:
    topojson -o world-id.topojson --id-property 'd => d.iso_a2.toUpperCase()' --simplify-proportion 0.1 [YOUR_SHAPEFILE.shp]
    
  • To make the file even lighter, filter out countries you don't need (match your CSV's codes):
    topojson -o world-id.topojson --id-property iso_a2 --filter 'd => ["FR", "DE", "GB"].includes(d.iso_a2)' --simplify-proportion 0.1 [YOUR_SHAPEFILE.shp]
    

Step 3: Verify the Output

Open world-id.topojson in a text editor and check the objects section. Each country feature should have an id set to your target code (e.g., "id": "FR"). This confirms the setup is ready for data binding.

Step 4: Bind CSV Data in D3.js

Once you have your world-id.topojson, linking to your CSV is straightforward. Here's a quick snippet:

d3.csv("your-data.csv").then(csvData => {
  // Turn CSV into a map for quick lookups by country code
  const dataLookup = d3.map(csvData, d => d.countryCode);

  // Load and render the topojson
  d3.json("world-id.topojson").then(worldTopo => {
    const countries = topojson.feature(worldTopo, worldTopo.objects.[YOUR_FEATURE_NAME]).features;
    
    svg.selectAll(".country")
      .data(countries)
      .enter()
      .append("path")
      .attr("class", "country")
      .attr("d", pathGenerator)
      .style("fill", d => {
        // Match via the topojson's `id` and CSV's country code
        const countryData = dataLookup.get(d.id);
        return countryData ? colorScale(countryData.value) : "#ccc"; // Gray out missing data
      });
  });
});

Just replace [YOUR_FEATURE_NAME] with the actual key under objects in your topojson (you'll see it when you open the file).

内容的提问来源于stack exchange,提问作者Hugolpz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:15:09