import { Fragment, useState, useRef } from "react"; import { Dialog, Disclosure, Menu, Transition } from "@headlessui/react"; import { XMarkIcon } from "@heroicons/react/24/outline"; import { ChevronUpIcon, ChevronDownIcon, FunnelIcon, MinusIcon, PlusIcon, } from "@heroicons/react/20/solid"; import Map, { Layer, Source, Popup, ScaleControl } from "react-map-gl"; import mapstyle from "./points.json"; mapstyle.sources.remap.url = import.meta.env.MODE === "development" ? "http://localhost:8080/capabilities/remap.json" : mapstyle.sources.remap.url const MAPBOX_TOKEN = "pk.eyJ1IjoiZ2hlcm1hbnQiLCJhIjoiY2wzbHR0YW1sMXB0YjNkcXd5NWpqaWpybiJ9.jyLcIcB7NLbtZzGYIJZWWg"; const paintedLayers = mapstyle.layers.reduce((acc, cur) => ({ ...acc, [cur.id]: cur }), {}) const pointsColors = mapstyle.layers.find(layer => layer.id == "Объекты").paint["circle-color"].slice(2, -1).reduce((acc, cur, i, source) => (i % 2 == 0 ? [...acc, { name: cur, color: source[i + 1] }] : acc), []) const pointsSizes = mapstyle.layers.find(layer => layer.id == "Объекты").paint["circle-radius"].slice(3).reduce((acc, cur, i, source) => (i % 2 == 0 ? [...acc, { value: cur, size: source[i + 1] }] : acc), []) const initialFilters = [ { id: "id_tech", name: "ВИЭ-технология", options: [ { "value": 1, "label": "СЭС", "checked": true }, { "value": 2, "label": "ВЭС", "checked": true }, { "value": 3, "label": "мГЭС", "checked": true }, { "value": 4, "label": "БиоЭС (биомасса)", "checked": true }, { "value": 5, "label": "БиоЭС (биогаз)", "checked": true }, { "value": 6, "label": "БиоЭС (свалочный газ)", "checked": true }, { "value": 8, "label": "ПЭС", "checked": true }, { "value": 9, "label": "ГеоЭС", "checked": true } ] }, { "id": "region_name", "name": "Регион размещения", "options": [ { "value": "Республика Адыгея ", "label": "Республика Адыгея ", "checked": true }, { "value": "Республика Алтай", "label": "Республика Алтай", "checked": true }, { "value": "Республика Башкортостан", "label": "Республика Башкортостан", "checked": true }, { "value": "Республика Бурятия", "label": "Республика Бурятия", "checked": true }, { "value": "Республика Дагестан", "label": "Республика Дагестан", "checked": true }, { "value": "Республика Ингушетия", "label": "Республика Ингушетия", "checked": true }, { "value": "Кабардино-Балкарская Республика", "label": "Кабардино-Балкарская Республика", "checked": true }, { "value": "Республика Калмыкия", "label": "Республика Калмыкия", "checked": true }, { "value": "Карачаево-Черкесская Республика", "label": "Карачаево-Черкесская Республика", "checked": true }, { "value": "Республика Карелия", "label": "Республика Карелия", "checked": true }, { "value": "Республика Коми", "label": "Республика Коми", "checked": true }, { "value": "Республика Крым", "label": "Республика Крым", "checked": true }, { "value": "Республика Марий Эл", "label": "Республика Марий Эл", "checked": true }, { "value": "Республика Мордовия", "label": "Республика Мордовия", "checked": true }, { "value": "Республика Саха (Якутия)", "label": "Республика Саха (Якутия)", "checked": true }, { "value": "Республика Северная Осетия – Алания", "label": "Республика Северная Осетия – Алания", "checked": true }, { "value": "Республика Татарстан ", "label": "Республика Татарстан ", "checked": true }, { "value": "Республика Тыва", "label": "Республика Тыва", "checked": true }, { "value": "Удмуртская Республика", "label": "Удмуртская Республика", "checked": true }, { "value": "Республика Хакасия", "label": "Республика Хакасия", "checked": true }, { "value": "Чеченская Республика", "label": "Чеченская Республика", "checked": true }, { "value": "Чувашская Республика", "label": "Чувашская Республика", "checked": true }, { "value": "Алтайский край", "label": "Алтайский край", "checked": true }, { "value": "Забайкальский край", "label": "Забайкальский край", "checked": true }, { "value": "Камчатский край", "label": "Камчатский край", "checked": true }, { "value": "Краснодарский край", "label": "Краснодарский край", "checked": true }, { "value": "Красноярский край", "label": "Красноярский край", "checked": true }, { "value": "Пермский край", "label": "Пермский край", "checked": true }, { "value": "Приморский край", "label": "Приморский край", "checked": true }, { "value": "Ставропольский край", "label": "Ставропольский край", "checked": true }, { "value": "Хабаровский край", "label": "Хабаровский край", "checked": true }, { "value": "Амурская область", "label": "Амурская область", "checked": true }, { "value": "Архангельская область", "label": "Архангельская область", "checked": true }, { "value": "Астраханская область", "label": "Астраханская область", "checked": true }, { "value": "Белгородская область", "label": "Белгородская область", "checked": true }, { "value": "Брянская область", "label": "Брянская область", "checked": true }, { "value": "Владимирская область", "label": "Владимирская область", "checked": true }, { "value": "Волгоградская область", "label": "Волгоградская область", "checked": true }, { "value": "Вологодская область", "label": "Вологодская область", "checked": true }, { "value": "Воронежская область", "label": "Воронежская область", "checked": true }, { "value": "Ивановская область", "label": "Ивановская область", "checked": true }, { "value": "Иркутская область", "label": "Иркутская область", "checked": true }, { "value": "Калининградская область", "label": "Калининградская область", "checked": true }, { "value": "Калужская область", "label": "Калужская область", "checked": true }, { "value": "Кемеровская область", "label": "Кемеровская область", "checked": true }, { "value": "Кировская область", "label": "Кировская область", "checked": true }, { "value": "Костромская область", "label": "Костромская область", "checked": true }, { "value": "Курганская область", "label": "Курганская область", "checked": true }, { "value": "Курская область", "label": "Курская область", "checked": true }, { "value": "Ленинградская область", "label": "Ленинградская область", "checked": true }, { "value": "Липецкая область", "label": "Липецкая область", "checked": true }, { "value": "Магаданская область", "label": "Магаданская область", "checked": true }, { "value": "Московская область", "label": "Московская область", "checked": true }, { "value": "Мурманская область", "label": "Мурманская область", "checked": true }, { "value": "Нижегородская область", "label": "Нижегородская область", "checked": true }, { "value": "Новгородская область", "label": "Новгородская область", "checked": true }, { "value": "Новосибирская область", "label": "Новосибирская область", "checked": true }, { "value": "Омская область", "label": "Омская область", "checked": true }, { "value": "Оренбургская область", "label": "Оренбургская область", "checked": true }, { "value": "Орловская область", "label": "Орловская область", "checked": true }, { "value": "Пензенская область", "label": "Пензенская область", "checked": true }, { "value": "Псковская область", "label": "Псковская область", "checked": true }, { "value": "Ростовская область", "label": "Ростовская область", "checked": true }, { "value": "Рязанская область", "label": "Рязанская область", "checked": true }, { "value": "Самарская область", "label": "Самарская область", "checked": true }, { "value": "Саратовская область", "label": "Саратовская область", "checked": true }, { "value": "Сахалинская область", "label": "Сахалинская область", "checked": true }, { "value": "Свердловская область", "label": "Свердловская область", "checked": true }, { "value": "Смоленская область", "label": "Смоленская область", "checked": true }, { "value": "Тамбовская область", "label": "Тамбовская область", "checked": true }, { "value": "Тверская область", "label": "Тверская область", "checked": true }, { "value": "Томская область", "label": "Томская область", "checked": true }, { "value": "Тульская область", "label": "Тульская область", "checked": true }, { "value": "Тюменская область", "label": "Тюменская область", "checked": true }, { "value": "Ульяновская область", "label": "Ульяновская область", "checked": true }, { "value": "Челябинская область", "label": "Челябинская область", "checked": true }, { "value": "Ярославская область", "label": "Ярославская область", "checked": true }, { "value": "Город Москва", "label": "Город Москва", "checked": true }, { "value": "Город Санкт-Петербург", "label": "Город Санкт-Петербург", "checked": true }, { "value": "Город Севастополь", "label": "Город Севастополь", "checked": true }, { "value": "Еврейская автономная область", "label": "Еврейская автономная область", "checked": true }, { "value": "Ненецкий автономный округ", "label": "Ненецкий автономный округ", "checked": true }, { "value": "Ханты-Мансийский автономный округ – Югра", "label": "Ханты-Мансийский автономный округ – Югра", "checked": true }, { "value": "Чукотский автономный округ", "label": "Чукотский автономный округ", "checked": true }, { "value": "Ямало-Ненецкий автономный округ", "label": "Ямало-Ненецкий автономный округ", "checked": true } ] }, { "id": "id_support", "name": "Форма поддержки", "options": [ { "value": 1, "label": "ДПМ ВИЭ 1.0 (оптовый рынок)", "checked": true }, { "value": 2, "label": "ДПМ ВИЭ 2.0 (оптовый рынок)", "checked": true }, { "value": 3, "label": "Розничный рынок (с поддержкой)", "checked": true }, { "value": 4, "label": "Розничный рынок (без поддержки)", "checked": true }, { "value": 5, "label": "Оптовый рынок (без поддержки)", "checked": true }, { "value": 6, "label": "Собственная генерация промышленности", "checked": true }, { "value": 7, "label": "ВИЭ в изолированнных энергосистемах", "checked": true } ] }, { "id": "main_company_for_site", "name": "Компания-владелец", "options": [ { "value": "ООО \"Вершина Девелопмент\"", "label": "ООО \"Вершина Девелопмент\"", "checked": true }, { "value": "АО \"НоваВинд\"", "label": "АО \"НоваВинд\"", "checked": true }, { "value": "ООО \"Ветропарки ФРВ\"", "label": "ООО \"Ветропарки ФРВ\"", "checked": true }, { "value": "ПАО \"ТГК-1\"", "label": "ПАО \"ТГК-1\"", "checked": true }, { "value": "ООО \"Солар Системс\"", "label": "ООО \"Солар Системс\"", "checked": true }, { "value": "ГК \"Хевел\"", "label": "ГК \"Хевел\"", "checked": true }, { "value": "ПАО \"ЭЛ5-Энерго\"", "label": "ПАО \"ЭЛ5-Энерго\"", "checked": true }, { "value": "ПАО \"Форвард Энерго\"", "label": "ПАО \"Форвард Энерго\"", "checked": true }, { "value": "Другие", "label": "Другие", "checked": true } ] }, { "id": "year_commissioning_filter", "name": "Год ввода в эксплуатацию", "options": [ { "value": "1905-2009", "label": "1905-2009", "checked": true }, { "value": "2010", "label": "2010", "checked": true }, { "value": "2011", "label": "2011", "checked": true }, { "value": "2012", "label": "2012", "checked": true }, { "value": "2013", "label": "2013", "checked": true }, { "value": "2014", "label": "2014", "checked": true }, { "value": "2015", "label": "2015", "checked": true }, { "value": "2016", "label": "2016", "checked": true }, { "value": "2017", "label": "2017", "checked": true }, { "value": "2018", "label": "2018", "checked": true }, { "value": "2019", "label": "2019", "checked": true }, { "value": "2020", "label": "2020", "checked": true }, { "value": "2021", "label": "2021", "checked": true }, { "value": "2022", "label": "2022", "checked": true }, { "value": "2023", "label": "2023", "checked": true } ] } ] export default function Points({ mapOptions, onMapOptionClick }) { const mapRef = useRef(null); const [open, setOpen] = useState(false) const [mobileFiltersOpen, setMobileFiltersOpen] = useState(false); const [popupInfo, setPopupInfo] = useState(null); const [filters, setFilters] = useState(initialFilters); const generatePopup = (info) => { console.log(info) return (
{info.power_fact_parc_mw != null && } {info.year_commissioning && } {info.year_qualification && } {info.support_name && } {info.region_name && } {info.residence_area && } {info.main_owner_company && }
Установленная мощность {info.power_fact_parc_mw.toFixed(2).replace(".", ",")} МВт
Год ввода в эксплуатацию {info.year_commissioning}
Год квалификации {info.year_qualification}
Механизм поддержки {info.support_name}
Регион размещения {info.region_name}
Район размещения {[info.residence_area, info.settlement, info.natural_object].filter(item => item).join(", ")}
Владелец объекта {info.current_owner_name && info.main_owner_company != info.current_owner_name ? `${info.current_owner_name} (${info.main_owner_company})` : info.main_owner_company}
{Boolean(info.rreda_member) && info.company_link_rreda &&

Ссылка на компанию: {info.company_link_rreda}

} {info.date_actualization &&

Дата актуализации: {info.date_actualization}

}
) } const clearAllOptions = (event) => { event.preventDefault() const newStateFilters = filters.map((filter) => filter.id == event.target.value ? { ...filter, options: filter.options.map((option) => { const newoption = { ...option, checked: false } return (newoption) }) } : filter ) setFilters(newStateFilters); } const addAllOptions = (event) => { event.preventDefault(); const newStateFilters = filters.map((filter) => filter.id == event.target.value ? { ...filter, options: filter.options.map((option) => { const newoption = { ...option, checked: true } return (newoption) }) } : filter ) setFilters(newStateFilters); } const handleFilterToggle = function (event) { const newStateFilters = filters.map((filter) => filter.id == event.target.name ? { ...filter, options: filter.options.map((option) => option.value == event.target.defaultValue ? { ...option, checked: !option.checked } : option ), } : filter ); setFilters(newStateFilters); }; const applyFilters = (filtersObj) => { const checkedFilters = ["all", ...filtersObj.map((propertyFilter) => [ "in", ["get", propertyFilter.id], ["literal", propertyFilter.options.filter(option => option.checked).map(option => option.value)], ])] return checkedFilters }; const handleClick = (event) => { setOpen(false) setPopupInfo(null) if (event.features[0]) { console.log(event.features[0].geometry) // event.originalEvent.stopPropagation(); setPopupInfo({ lon: event.features[0].geometry.coordinates[0], lat: event.features[0].geometry.coordinates[1], ...event.features[0].properties }) setOpen(true) } }; const handleMouseEnter = (event) => { const feature = event.features[0]; if (!feature) return; mapRef.current.getCanvas().style.cursor = "pointer"; }; const handleMouseLeave = (event) => { const feature = event.features[0]; if (!feature) { return; } mapRef.current.getCanvas().style.cursor = ""; }; return (

Объекты ВИЭ-генерации в регионах России

{mapOptions.find((option) => option.current).name}
{mapOptions.map((option) => ( {option.name} ))}
{/* Layers */}
    {mapstyle.layers.map((layer) => (
    { mapRef.current .getMap() .setLayoutProperty( event.target.id, "visibility", event.target.checked ? "visible" : "none" ); }} />
    ))}
{/* Legend */} {({ open }) => ( <>

Легенда {open ? (

Установленная мощность

{pointsSizes[0].value}
{pointsSizes[1].value} МВт

ВИЭ-технология

{pointsColors.map(e =>

{e.name}

)}

СЭС – солнечные электростанции

ВЭС – ветроэлектростанции

мГЭС – малые гидроэлектростанции

БиоЭС (биомасса) – биоэлектростанции на основе биомассы

БиоЭС (биогаз) – биоэлектростанции на основе биогаза

БиоЭС (свалочный газ) – биоэлектростанции на основе свалочного газа

ГеоЭС – геотермальные электростанции

ПЭС – приливные электростанции

)}
{/* Filters */} {filters.map((section) => ( {({ open }) => ( <>

{section.name} {open ? (

/
{section.options.map((option, optionIdx) => (
{pointsColors.find(color => color.name == option.label) &&
color.name == option.label).color }}>
}
))}
)}
))} {/* Metadata */} {({ open }) => ( <>

Метаданные {open ? (

© Ассоциация развития возобновляемой энергетики

)}
{/* Map itself */}
{open &&

{popupInfo.res_name_parc}

{popupInfo.region_name}
}
{popupInfo && popupInfo.res_name_parc}
{/* Replace with your content */} {popupInfo && generatePopup(popupInfo)} {/* /End replace */}
); }