Size: a a a

2020 May 10

A

Andrew in Mapbox чат
Alberto you can use https://docs.mapbox.com/mapbox-gl-js/example/animate-point-along-route/ as an example and try to do same on ios
источник

AM

Alberto Martin in Mapbox чат
Yes is a good idea
источник

A

Andrew in Mapbox чат
источник
2020 May 11

KB

Konstantin Biryukov in Mapbox чат
когда ведешь "trace" по карте, которая следует по заданной траектории вместе с камерой с помощью flyTo и panTo, есть ли возможность части пути этой линии задать другие свойства, например с 0 по 100 точки - красная линия, с 100 по 200 - зеленая, с 200 и далее - снова красная ? если использовать setLayoutProperty для этого слоя, то меняется свойства всей линии, а не ее части. например когда цикл пути доходит до сотой точки полностью вся линия вместо красной становится зеленой, а нее ее часть, а нужна другая логика
источник

DP

Darafei Praliaskousk... in Mapbox чат
Konstantin Biryukov
когда ведешь "trace" по карте, которая следует по заданной траектории вместе с камерой с помощью flyTo и panTo, есть ли возможность части пути этой линии задать другие свойства, например с 0 по 100 точки - красная линия, с 100 по 200 - зеленая, с 200 и далее - снова красная ? если использовать setLayoutProperty для этого слоя, то меняется свойства всей линии, а не ее части. например когда цикл пути доходит до сотой точки полностью вся линия вместо красной становится зеленой, а нее ее часть, а нужна другая логика
это одна невидимая и много разноцветных линий?
источник

DP

Darafei Praliaskousk... in Mapbox чат
(и одна в форме котёнка)
источник

A

Alex CherryTea in Mapbox чат
Konstantin Biryukov
когда ведешь "trace" по карте, которая следует по заданной траектории вместе с камерой с помощью flyTo и panTo, есть ли возможность части пути этой линии задать другие свойства, например с 0 по 100 точки - красная линия, с 100 по 200 - зеленая, с 200 и далее - снова красная ? если использовать setLayoutProperty для этого слоя, то меняется свойства всей линии, а не ее части. например когда цикл пути доходит до сотой точки полностью вся линия вместо красной становится зеленой, а нее ее часть, а нужна другая логика
В сорсе установите линиям проперти, цвет задайте на основе этих пропертей через выражение. Измененные данные вы можете подкидывать сорсу на лету
источник

A

Alex CherryTea in Mapbox чат
.setData кажется
источник

KB

Konstantin Biryukov in Mapbox чат
Darafei Praliaskouski
это одна невидимая и много разноцветных линий?
одна одноцветная линия идет просто по координатам формируя layer, т.е. линия с каждой новой точкой растет (прямо рисуется на ходу идя по координатам)
источник

KB

Konstantin Biryukov in Mapbox чат
Alex CherryTea
В сорсе установите линиям проперти, цвет задайте на основе этих пропертей через выражение. Измененные данные вы можете подкидывать сорсу на лету
я задавал цвет статически в layer, а потом меняю одну из property этого layer. но перекрашивается вся линия.
источник

KB

Konstantin Biryukov in Mapbox чат
1. у меня линия задается как слой :                              

store.state.map.addSource('trace', {type: 'geojson', data: data});
store.state.map.addLayer({
                                  'id': 'trace',
                                  'type': 'line',
                                  'source': 'trace',
                                  'paint': {
                                      'line-color': 'red',
                                      'line-opacity': 0.75,
                                      'line-width': 7
                                  }
                              });

2. потом начинает рисоваться будучи красной, на 300 точке я меняю на зеленый, но меняется вся линия полностью, а надо чтобы менялась только та часть что идет с 300ой точки :
(  store.state.map.setPaintProperty('trace', 'line-color’, ‘green’);
Код:
let i = 0;
this.timer = window.setInterval(() => {
   if (i < coordinates.length) {
       if (i < 300) {
           data.features[0].geometry.coordinates.push(
               coordinates[i]
           );
             store.state.map.getSource('trace').setData(data);
             store.state.map.panTo(coordinates[i]);
             i++;
             store.state.map.flyTo({'center': coordinates[i], 'zoom': 10, 'speed': 0.15});
           }
       } else if (i >= 300 && i <= 400) {
           data.features[0].geometry.coordinates.push(
               coordinates[i]
           );

           store.state.map.setPaintProperty('trace', 'line-color’, ‘green’);
           store.state.map.getSource('trace').setData(data);
           store.state.map.panTo(coordinates[i]);
           store.state.map.flyTo({'center': coordinates[i], 'zoom': 5, 'speed': 0.7});
           i++;
       } else if (i > 400) {

           data.features[0].geometry.coordinates.push(
               coordinates[i]
           );

           store.state.map.setPaintProperty('trace', 'line-color’, ‘red’);
           store.state.map.getSource('trace').setData(data);
           store.state.map.panTo(coordinates[i]);
           store.state.map.flyTo({'center': coordinates[i], 'zoom': 12, 'speed': 0.5});
           i++;

       }
   } else {
       window.clearInterval(this.timer);
   }
}, 75);
источник

ПШ

Павел Шиняев... in Mapbox чат
Свойства отрисовки применяются ко всему слою. Как вариант делать несколько источников и слоёв чтобы они были разного цвета
источник

A

Alex CherryTea in Mapbox чат
Konstantin Biryukov
1. у меня линия задается как слой :                              

store.state.map.addSource('trace', {type: 'geojson', data: data});
store.state.map.addLayer({
                                  'id': 'trace',
                                  'type': 'line',
                                  'source': 'trace',
                                  'paint': {
                                      'line-color': 'red',
                                      'line-opacity': 0.75,
                                      'line-width': 7
                                  }
                              });

2. потом начинает рисоваться будучи красной, на 300 точке я меняю на зеленый, но меняется вся линия полностью, а надо чтобы менялась только та часть что идет с 300ой точки :
(  store.state.map.setPaintProperty('trace', 'line-color’, ‘green’);
Код:
let i = 0;
this.timer = window.setInterval(() => {
   if (i < coordinates.length) {
       if (i < 300) {
           data.features[0].geometry.coordinates.push(
               coordinates[i]
           );
             store.state.map.getSource('trace').setData(data);
             store.state.map.panTo(coordinates[i]);
             i++;
             store.state.map.flyTo({'center': coordinates[i], 'zoom': 10, 'speed': 0.15});
           }
       } else if (i >= 300 && i <= 400) {
           data.features[0].geometry.coordinates.push(
               coordinates[i]
           );

           store.state.map.setPaintProperty('trace', 'line-color’, ‘green’);
           store.state.map.getSource('trace').setData(data);
           store.state.map.panTo(coordinates[i]);
           store.state.map.flyTo({'center': coordinates[i], 'zoom': 5, 'speed': 0.7});
           i++;
       } else if (i > 400) {

           data.features[0].geometry.coordinates.push(
               coordinates[i]
           );

           store.state.map.setPaintProperty('trace', 'line-color’, ‘red’);
           store.state.map.getSource('trace').setData(data);
           store.state.map.panTo(coordinates[i]);
           store.state.map.flyTo({'center': coordinates[i], 'zoom': 12, 'speed': 0.5});
           i++;

       }
   } else {
       window.clearInterval(this.timer);
   }
}, 75);
я вижу два варианта.
Сначала ты все делаешь как сейчас, потом когда тебе надо сменить цвет - создаешь новый сорс и слой с другим цветом (красным). Этот новый сорс начинается там где закончилась зеленая линия
источник

A

Alex CherryTea in Mapbox чат
второй вариант я раписал выше
источник

DP

Darafei Praliaskousk... in Mapbox чат
делаешь одну длинную невидимую линию и едешь по ней траекторией
распиливаешь эту линию на кусочки, кусочки рисуешь каждый своим цветом
источник

KB

Konstantin Biryukov in Mapbox чат
спасибо! буду рендерить новую линию на отдельный layer. а как проще всего сделать так, чтобы точно быть уверенным что после первой нарисованной линии сразу запуститься рисовка второй? подгонка setTimeout под это как то выходит не очень
источник

DP

Darafei Praliaskousk... in Mapbox чат
да рендери ты в тот же слой, только пропертю повесь что цвет другой и в стиль правило напиши
источник

A

Alex CherryTea in Mapbox чат
Konstantin Biryukov
спасибо! буду рендерить новую линию на отдельный layer. а как проще всего сделать так, чтобы точно быть уверенным что после первой нарисованной линии сразу запуститься рисовка второй? подгонка setTimeout под это как то выходит не очень
для того чтобы добавлять фичи в существующий сорс использйу метод .setData сорса. Для того чтобы определять в стиле цвет в зависимости от пропертей фичи используй выражения типа "categorical"
'fill-color': {
 type: 'categorical',
 property: 'название_проперти_определяющей_цвет',
 stops: [
   ['red',   'rgb(255, 0, 0)'],
   ['green', 'rgb(0, 255, 0)'],
   ['blue',  'rgb(0, 0, 255)'],
 ]
}
источник

KB

Konstantin Biryukov in Mapbox чат
Alex CherryTea
для того чтобы добавлять фичи в существующий сорс использйу метод .setData сорса. Для того чтобы определять в стиле цвет в зависимости от пропертей фичи используй выражения типа "categorical"
'fill-color': {
 type: 'categorical',
 property: 'название_проперти_определяющей_цвет',
 stops: [
   ['red',   'rgb(255, 0, 0)'],
   ['green', 'rgb(0, 255, 0)'],
   ['blue',  'rgb(0, 0, 255)'],
 ]
}
а setData же geojson принимает в агрумент. вы имеете ввиду это в контексте того, что новые координаты можно на лету  будет отдать ? ( в контексте этого вопрос: а можно ли вызвать fetch на несколько файлов сразу ?) а насчет property как mapbox поймет, что надо менять цвет в данном примере ?
источник

KB

Konstantin Biryukov in Mapbox чат
а, red, green и blue это и есть условия переключения
источник