Разработка географических визуализаций (Mapbox GL/Deck.gl) для сайта

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Разработка географических визуализаций (Mapbox GL/Deck.gl) для сайта
Средняя
~5 рабочих дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Разработка географических визуализаций (Mapbox GL/Deck.gl) для сайта

Mapbox GL JS и Deck.gl позволяют создавать интерактивные карты с кастомными слоями данных: тепловые карты активности, маршруты доставок, choropleth-карты по регионам, scatter plots по координатам.

Mapbox GL JS — базовая карта

npm install mapbox-gl react-map-gl
import Map, { Source, Layer, Popup } from 'react-map-gl';
import 'mapbox-gl/dist/mapbox-gl.css';

function DeliveryMap({ orders }) {
  const [popup, setPopup] = useState(null);

  const geojsonData = {
    type: 'FeatureCollection',
    features: orders.map(order => ({
      type: 'Feature',
      geometry: {
        type: 'Point',
        coordinates: [order.lng, order.lat]
      },
      properties: {
        id: order.id,
        status: order.status,
        address: order.address
      }
    }))
  };

  return (
    <Map
      mapboxAccessToken={process.env.NEXT_PUBLIC_MAPBOX_TOKEN}
      initialViewState={{ longitude: 37.6, latitude: 55.75, zoom: 10 }}
      style={{ width: '100%', height: 500 }}
      mapStyle="mapbox://styles/mapbox/light-v11"
    >
      <Source id="orders" type="geojson" data={geojsonData}>
        <Layer
          id="orders-circles"
          type="circle"
          paint={{
            'circle-radius': 8,
            'circle-color': [
              'match', ['get', 'status'],
              'delivered', '#22c55e',
              'in-transit', '#f59e0b',
              'failed', '#ef4444',
              '#6b7280'
            ],
            'circle-stroke-width': 2,
            'circle-stroke-color': '#ffffff'
          }}
          onClick={(e) => {
            const feature = e.features?.[0];
            if (feature) {
              setPopup({
                lng: e.lngLat.lng,
                lat: e.lngLat.lat,
                ...feature.properties
              });
            }
          }}
        />
      </Source>

      {popup && (
        <Popup longitude={popup.lng} latitude={popup.lat}
          onClose={() => setPopup(null)} closeButton={false}>
          <div>
            <strong>Заказ #{popup.id}</strong>
            <p>{popup.address}</p>
            <StatusBadge status={popup.status} />
          </div>
        </Popup>
      )}
    </Map>
  );
}

Deck.gl — визуализации больших датасетов

npm install deck.gl @deck.gl/react @deck.gl/layers @deck.gl/aggregation-layers
import DeckGL from '@deck.gl/react';
import { Map } from 'react-map-gl';
import { HeatmapLayer, ScatterplotLayer, ArcLayer } from 'deck.gl';

function HeatmapDashboard({ events, routes }) {
  const layers = [
    // Тепловая карта кликов/событий
    new HeatmapLayer({
      id: 'heatmap',
      data: events,
      getPosition: d => [d.longitude, d.latitude],
      getWeight: d => d.weight,
      radiusPixels: 30,
      intensity: 1,
      threshold: 0.1,
      colorRange: [
        [0, 25, 0, 0],
        [0, 85, 0, 85],
        [0, 170, 0, 170],
        [0, 255, 0, 255]
      ]
    }),

    // Дуговой слой — маршруты между городами
    new ArcLayer({
      id: 'arcs',
      data: routes,
      getSourcePosition: d => d.from,
      getTargetPosition: d => d.to,
      getSourceColor: [0, 128, 200],
      getTargetColor: [200, 0, 80],
      getWidth: d => d.volume / 100,
      pickable: true,
      onClick: ({ object }) => console.log('Route:', object)
    })
  ];

  return (
    <DeckGL
      initialViewState={{ longitude: 37.6, latitude: 55.75, zoom: 4, pitch: 40 }}
      controller={true}
      layers={layers}
      getTooltip={({ object }) => object && `${object.from_city} → ${object.to_city}`}
    >
      <Map mapboxAccessToken={MAPBOX_TOKEN} mapStyle="mapbox://styles/mapbox/dark-v11" />
    </DeckGL>
  );
}

Choropleth карта регионов

// Загрузка GeoJSON регионов России
const russiaRegions = await fetch('/api/geodata/russia-regions.geojson').then(r => r.json());

function RegionChoropleth({ revenueByRegion }) {
  const choroplethData = {
    ...russiaRegions,
    features: russiaRegions.features.map(feature => ({
      ...feature,
      properties: {
        ...feature.properties,
        revenue: revenueByRegion[feature.properties.regionCode] ?? 0
      }
    }))
  };

  return (
    <Map initialViewState={{ longitude: 65, latitude: 65, zoom: 2 }}>
      <Source type="geojson" data={choroplethData}>
        <Layer
          type="fill"
          paint={{
            'fill-color': [
              'interpolate', ['linear'],
              ['get', 'revenue'],
              0, '#f0f9ff',
              100000, '#3b82f6',
              1000000, '#1e40af'
            ],
            'fill-opacity': 0.8
          }}
        />
        <Layer
          type="line"
          paint={{ 'line-color': '#ffffff', 'line-width': 0.5 }}
        />
      </Source>
    </Map>
  );
}

Сроки

Базовая карта с маркерами и попапами — 3–5 дней. Deck.gl тепловые карты и дуговые слои — 1–2 недели. Хорплет с GeoJSON регионов — ещё 3–5 дней.