Йдуть роботи над кодом програми
Зараз оновлюємо сервіс. Деякі функції можуть працювати некоректно або тимчасово бути недоступними. Дякуємо за терпіння.

0,2416….opsNormalizeMarkers() у finalizeBatchLoad: групування по opsCoordKey (lat/lon 5 знаків) + opsNormNameKey (сортований набір токенів, без лапок/дефісів/порядку). Мутує markers[], будує __opsMergeIndex.OPS_CITY_COLLAPSE_MIN=3 різних обʼєктів на 1 координату → approx=true (міська привязка), сірі opsPinIconApprox/opsClusterIconApprox._opsMarkerExtraHtml (джерела + ≈); панель: renderNoCoordPanel/__opsNoCoord.parseCoordCell (MGRS через parseMGRSCell, далі findCoordsInText — лише однозначний результат), rowCoordCells, isWideCoordTable (умова: є рядок із ≥2 координатами і таких рядків не менше, ніж рядків з однією; шапка з WGS/MGRS/УРС вимикає режим), collectMarkersFromWideTable — підпис із нечислових клітинок рядка + · k/n, дедуп точок у межах рядка за toFixed(6).detectTableLayout → idx.wide + startRow=0; поза wide-режимом рядок із координатою більше не з'їдається як шапка. collectMarkersFromTable і ...ForAnalytics гілкуються по idx.wide.sheetRowsFromWorksheet (два проходи sheet_to_json: raw:true + raw:false — форматований текст лише для числових клітинок часу/дати), sheetsFromArrayBuffer (усі непорожні аркуші). sheetRowsFromArrayBuffer лишився як обгортка.handleTable({sheet}) — назва аркуша в idx.sheet; у wide-режимі #xlsxColPicker ховається. Перемикач #xlsxAllSheets (localStorage: coords_xlsx_all_sheets), звіт sheetInfo/skippedSheets у showOpsImportSummary.js/analytics.js більше не читає книгу власним кодом — бере deps.sheetsFromArrayBuffer і проходить усі аркуші. Cache-bust: analytics.js?v=8.#viewBrandCredit у #viewBrand (11 px / 10 px у компактному), стилі в index.html + body.view-only у redesign-v3.css. Cache-bust: redesign-v3.css?v=10.normalizeMgrsWhitespace переписано: замість одного жадібного replace (де [ \t\r\n]*\d перетягував «36» наступного рядка) — glueMgrsInLine (ручний скан, стоп на 10 цифрах і на будь-якому не-цифровому символі) + joinSplitMgrsLines (перенос лікуємо лише коли наступний рядок — чисті цифри і сума парна, ≤10).findCoordsInText: [ \t]*(\d{4,10}) замість \s*(\d(?:[\d\s]*\d)?) — цифри лише в межах рядка, без «поглинання» сусідньої координати.stripCoordTokens + блок B у collectMarkersFromText: mainHeader / subHeader (регекс серій ^\d{1,2}\s*(?:[\)\].:-]|сер|черг|хвил|захід), ≤24 симв.), нумерація #n за однаковим підписом і лише для реально доданих точок (push тепер повертає boolean).maskNonCoordNumbers (дати dd.mm.yy(yy), відстані км/km/м/мм/см) перед десятковою гілкою; вільне парування чисел вимкнено для рядків з MGRS або DMS.geocodeName / geocodeNameNominatim / geocodeNamePhoton / geocodeNameGoogle, geocodeObjectsFromText, extractObjectNames, buildRetryQuery, buildAndRenderUnresolvedPlaceClusters + unresolvedPlaceClusters, renderNominatimDebug, словники MANUAL_OBJECTS / EXTERNAL_OBJECTS (normalizeKey, findManualObject, findExternalObject, loadExternalObjects), looksLikeCoordsString, GOOGLE_API_KEY, статуси NOMINATIM_STATUS/PHOTON_STATUS + updateGeoStatusUI (≈650 рядків JS).#importSec4 (#objectsInput, #objectsBtn, #objectsStatus, #debugToggleBtn), панель #nominatimDebug (+ мобільний блок і класи .badge-ok/.badge-fail/.badge-cache), #geoStatus; правила #importSec4 прибрано з css/redesign-v3.css. Файл external_objects.json видалено (він і так був закритий у .htaccess — fetch завжди падав у 403), правило звужено до sessions.json.clearAll() більше не чистить debug-панель і кластери; у «Парсити текст» знято доданок statsByNames (алерт → «Координати не знайдені»). Мітки старих подій n_start/n_done у log_labels.php лишились, щоб історичні логи читались.taxonomy.js: STRIKE_CONTEXT_RE + detectStrikeMeans — «на ураження / засіб ураження» + список засобів (бпла|ствольна арта|каб|…). stripStrikeMeans ріже цей фрагмент перед classify. Cache-bust: taxonomy.js?v=3, analytics.js?v=9.parse_text_* / Word: sample до 4000 символів + масив headers (рядки-шапки без MGRS) — щоб наступні формулювання засобів брати з реальних завантажень, а не вигадувати універсальний парсер шапок.__COORDS_BUILD=2.6.8, SW coords-v2.6.8, app_version.php=2.6.8 (до 2.6.4 — 2.6.0).maps.app.goo.gl (розвідзведення з Google Maps)css/redesign-v3.css, Auth V3 split, mode tabs у header, js/map-chrome.jsOPS_MARKER_FILL/STROKE, opsPinIcon (іконка типу), opsClusterIcon завжди fa-crosshairsOPS_CLUSTER_RADIUS_PX=18; колір типу більше не на кластеріcircleMarker + showAppLoader/hideAppLoader на імпорті (js/analytics.js)</script> після SW ламав блок toast/LBZ — код рендерився як текстapp_version.php + window.__COORDS_BUILD, SW coords-v2.5.1 network-first для HTML/JS/CSSCache-Control: no-store для /, index.html, sw.jsredesign-v3.css?v=9, analytics.js?v=5, map-chrome.js?v=3, taxonomy.js?v=2redesign-preview/red-icons-mockup.html, cluster-zoom-mockup.htmlsave.php (link_wm_generate), окремо від meta.noteicon-*-v24.png + manifest.id для скидання кешу ярликів Windowscoords_dt() / Europe/Kyiv у config.phpcoords-v2.4.1action=save_note), превʼю сітки WMip_history.php / data/ip_nicks.json, клік по IP у журналіadmin_status.php → body.is-adminadmin_settings.php (гейт адмін-паролем)admin_logs.php), «Хто онлайн»is_admin, окремий admin_login.phpanalytics_save/load, lbz_save/load — auth, rate-limit, ETagarchive.php?preview_link=)/data/ /logs/, owner_key у save.phpCOORDS_ADMIN_PASS, COORDS_ACCESS_CODE, COORDS_LOG_SECRETexpires_at, швидкий tail логів, ліміти connections
Завантажте файли за місяць або квартал — сервіс покаже зведення: топ населених пунктів, розподіл по областях, частоту згадок обʼєктів (АЗС, заводи тощо) та динаміку по датах.
Дистанційні мінування за координатами з коротким відео. Обовʼязково прикріпіть відео у браузері (перетягніть або «оберіть відео») — шлях на компʼютері (C:\…) сам не передається. З назви файлу на кшталт «36T YT 17611 80072 Мінування.mp4» підтягнуться координата й опис.
Маркери відсутні
Імпортуйте файл або введіть координати вручну
Програма знайшла слово, яке не розпізнала. Категорія — це тип самого обʼєкта (склад, РЛС, ТЕЦ), а не засіб удару (ФАБ, КАБ, УМПК, БЕК).
Зараз оновлюємо сервіс. Деякі функції можуть працювати некоректно або тимчасово бути недоступними. Дякуємо за терпіння.