Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

161
Visualizações
Cómo centrar y escalar usando geoPath

Estoy filtrando un subconjunto de condados de EE. UU. con D3 y topojson. Puedo filtrar con éxito los condados y dibujarlos en un elemento SVG, pero ¿cómo cambio los límites del mapa para que se ajusten a los nuevos condados seleccionados? Representa el mapa como si los límites fueran todos los condados de EE. UU. frente a solo los filtrados.

 var width=960, height=600, centered; const svgElement = d3.select(ref.current) .append("svg") .attr("preserveAspectRatio", "xMinYMin meet") .attr("viewBox", [0,0,width,height]); var path = d3.geoPath(); d3.json("https://d3js.org/us-10m.v2.json").then((d) => { d.objects.counties.geometries = d.objects.counties.geometries.filter(function(item) { return props.data.indexOf(item.id) > -1 }) var counties = topojson.feature(d, d.objects.counties).features; svgElement.append("g") .attr("class", "filled-territory") .selectAll("path") .data(counties) .enter() .append("path") .attr("d", path) });

Donde props.data es una matriz de ID de condado como:

 [ "45001", "45003", "45007", "45083", "45087", "45091" ]

Puedo hacer que se muestre así, pero no puedo entender cómo hacer que la ruta llene el SVG: Ejemplo

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Este archivo en particular usa un sistema de coordenadas de píxeles (son datos geográficos proyectados), llena una extensión entre [0,0] y [960,600]. Debido a que usa este sistema de coordenadas, a menudo podemos usar la proyección predeterminada de d3.geoPath, una proyección nula que trata las coordenadas en su json como píxeles. Sin embargo, el geoPath por sí solo no proporciona una forma de centrar o escalar sus entidades por sí mismo.

Las proyecciones geográficas D3 vienen con un método llamado fitSize (también fitExtent u otros) que toma un objeto geojson y establece la escala de proyección y traduce las propiedades para centrar ese objeto geojson en la extensión especificada. Dado que ya tenemos datos proyectados, podemos usar d3.geoIdentity() que proporciona algunos métodos de proyección convenientes como fitSize pero, de lo contrario, no proyecta nuestros datos como ya están proyectados.

Para usar fitSize podemos usar lo siguiente:

 // get a geojson feature collection object: var geojson = topojson.feature(d, d.objects.counties) // create a geoidentity "projection" and center the geojson: var projection = d3.geoIdentity() .fitSize([width,height],geojson) // set the path's projection: path.projection(projection); // Now access the array of features in the collection for use with .data(): var counties = geojson.features;

Que se parece a:

 var data = [ "45001", "45003", "45007", "45083", "45087", "45091" ] var width=500, height=500; const svgElement = d3.select("body") .append("svg") .attr("width", width) .attr("height", height); var path = d3.geoPath(); d3.json("https://d3js.org/us-10m.v2.json").then((d) => { d.objects.counties.geometries = d.objects.counties.geometries.filter(function(item) { return data.indexOf(item.id) > -1 }) var geojson = topojson.feature(d, d.objects.counties) var projection = d3.geoIdentity() .fitSize([width,height],geojson) path.projection(projection); var counties = geojson.features; svgElement.append("g") .attr("class", "filled-territory") .selectAll("path") .data(counties) .enter() .append("path") .attr("d", path) });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/topojson/3.0.2/topojson.min.js "></script>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda