Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

326
Vistas
Mapa mundial D3, el centroide de algunos países está desactivado

Hola, estoy creando la aplicación React en la que intento hacer un mapa mundial usando D3. Quiero que cuando el usuario se desplace sobre un país específico, aparezca un círculo en el centroide de la ruta de ese país, pero para algunos países como "EE. UU.", "Francia", "Noruega" el centroide está un poco fuera de lugar porque partes de esos países están separadas entre sí.

Aquí está mi componente:

 import styles from './WorldMap.module.css' import * as d3 from "d3"; import {useEffect, useRef, useState} from "react"; import * as topojson from "topojson-client"; const WorldMap = () => { const svgRef = useRef(null) const pathRefs = useRef([]) let [mapJson, setMapJson] = useState(null) let [mapTopo, setMapTopo] = useState(null) let [tooltipCoordinates, setTooltipCoordinates] = useState([0,0]) useEffect(() => { d3.json("https://unpkg.com/world-atlas@2.0.2/countries-50m.json").then(data => setMapTopo(data)) }, []) useEffect(() => { if (!mapTopo) return; setMapJson(topojson.feature(mapTopo, mapTopo.objects.countries)) }, [mapTopo]) const projection = d3.geoMercator() .center([0, 60]) const path = d3.geoPath(projection); const handleMouseOver = (feature) => (e) => { const coordinates = path.centroid(feature) setTooltipCoordinates(coordinates) } return ( <svg className={styles.svg__map} ref={svgRef} viewBox={"0 0 900 400"}> <g> {mapJson?.features?.map((feature, i) => <path onMouseOver={handleMouseOver(feature)} className={styles.svg__country} ref={el => pathRefs.current[i] = el} key={i} d={d3.geoPath(projection)(feature)} />)} <circle cx={tooltipCoordinates[0]} cy={tooltipCoordinates[1]} r={6} fill={"#2e2eca"} /> </g> </svg> ) } export default WorldMap;

Obtengo datos de ruta de países como topojson y luego los convierto a json.

archivo css:

 .svg__map{ width: 100%; min-height: 65vh; background-color: #cbcccc; } .svg__country{ stroke-width: .5; stroke: #949292; }

Esta es una captura de pantalla del centroide para Noruega: ingrese la descripción de la imagen aquí

¿Hay alguna solución para esto, o tal vez alguna otra proyección geográfica para este tipo de cosas?

about 4 years ago · Santiago Gelvez
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda