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

294
Vistas
MapBoxGL, problema de rendimiento de múltiples capas

Premisa: tengo un conjunto de datos (paradas en el mapa) cargados a través de geoJSON en una fuente agrupada, cada una de estas ubicaciones de parada puede tener un ícono diferente.

Tengo más de 140 variaciones de iconos. Estoy iterando a través de todos ellos y genero una capa de tipo "símbolo" para cada uno.
Además, estoy cargando cada imagen de icono de parada (formato png) a través map.loadImage() .

Problema: el problema al que me enfrento es que el tiempo de carga es muy alto y el mapa no es fluido hasta que se cargan y muestran todas las capas.

¿Puede ayudarme con una sugerencia sobre cómo reducir el tiempo de carga y aumentar el rendimiento?

LaCapa.tsx

 export default React.memo(function MyStopsLayers(props: Props) { return ( <> {ICONS.map(icon => props.isEditMode ? ( <EditStopLayer key={icon.id} icon={icon} {...props} /> ) : ( <StopLayer key={icon.id} iconType={icon} {...props} /> ), )} </> ); });

StopLayer.tsx

 const StopLayer: React.FC<Props & { icon: Icon }> = ({ icon, showOrderNumber }) => { return ( <> <Layer key={icon.id} id={icon.id} type="symbol" source={MAP_CLUSTERS_SOURCE} filter={['all', ['!', ['has', 'point_count']], ['==', ['get', 'icon'], icon.id]]} paint={{}} layout={{ 'symbol-z-order': 'source', 'symbol-sort-key': 1, 'icon-image': icon.id, 'icon-size': 0.5, 'icon-allow-overlap': true, }} /> {showOrderNumbers && ( <Layer key={icon.id + 'orderNumber'} id={icon.id + 'orderNumber'} type="symbol" minzoom={15} source={MAP_CLUSTERS_SOURCE} filter={[ 'all', ['!', ['has', 'point_count']], ['==', ['get', 'icon'], iconType.id], ]} paint={{ 'text-halo-color': '#fff', 'text-halo-width': 15 }} layout={{ 'symbol-z-order': 'source', 'text-field': showOrderNumber ? ['get', 'orderNo'] : '', 'text-offset': [0, 1.25], 'text-size': 15, }} /> )} </> ); };
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede y debe tener solo una capa para todas las ubicaciones de sus paradas. La forma de establecer un ícono diferente para cada uno es mediante el estilo basado en datos , vea esto , por ejemplo.

Primero cargas las imágenes:

 map.addImage("someIcon1", iconResource1) map.addImage("someIcon2", iconResource2)

Luego, en la fuente, agrega la identificación del icono a una propiedad de "icono" para cada ubicación de parada:

 const feature = { id: data.id, type: 'Feature', properties: { id: data.id, icon: "someIcon1" // use the icon id here }, geometry: { //... } };

Y luego, en la propiedad de diseño de capa, obtendría el ícono de la fuente:

 layout: { 'icon-image': ['get', 'icon'] },
about 4 years ago · Juan Pablo Isaza Denunciar
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