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

298
Visualizações
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 Respostas
Responde à pergunta

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 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