SQL Server w logistyce

Tabela _maps w bazie danych SQL Server

Współrzędne geograficzne przypisane do rekordów systemu — punkt wyjścia dla map, tras i geofencingu.

sql.server.net.pl/sql/
Uśmiechnięty analityk w garniturze przy szerokim monitorze
Uśmiechnięty analityk w garniturze przy szerokim monitorze
W skrócie
  • Tabela wiąże dowolny rekord systemu z parą współrzędnych — przez numer referencyjny REFNO.
  • Indeks unikalny na tej kolumnie gwarantuje, że jednemu rekordowi odpowiada dokładnie jedno położenie.
  • Poza samą lokalizacją zapisywane są ustawienia prezentacji: przybliżenie, grupowanie znaczników i etykiety.
  • Współrzędne zapisano jako liczby zmiennoprzecinkowe, a nie w typie przestrzennym — przy obliczeniach odległości ma to znaczenie.

Do czego służy tabela [dbo].[_maps]

Adres kontrahenta zapisany tekstem wystarcza do wydrukowania listu przewozowego, ale nie pozwala pokazać punktu na mapie ani policzyć odległości. Tabela [dbo].[_maps] uzupełnia tę lukę: przechowuje współrzędne geograficzne przypisane do rekordów systemu.

Powiązanie jest celowo ogólne. Kolumna REFNO odwołuje się do numeru referencyjnego dowolnego rekordu — może to być kontrahent, magazyn, punkt odbioru albo zlecenie transportowe. Dzięki temu jedna struktura obsługuje wszystkie te przypadki, a indeks unikalny pilnuje, żeby jeden rekord nie miał dwóch sprzecznych położeń.

Trzy kolumny opisują nie lokalizację, lecz sposób jej pokazania. Przybliżenie decyduje o skali mapy otwieranej dla danego rekordu, grupowanie steruje łączeniem sąsiadujących znaczników w jeden, a etykiety — wyświetlaniem podpisów. Ustawienia zapisane przy rekordzie pozwalają otworzyć mapę magazynu w innej skali niż mapę trasy międzynarodowej.

Od rekordu w bazie do punktu na mapie
Rekord RekordKontrahent, magazyn albo punkt odbioru w kartotece
Współrzędne WspółrzędnePara wartości LATITUDE i LONGITUDE przypisana przez REFNO
Prezentacja PrezentacjaPrzybliżenie, grupowanie i etykiety sterują wyglądem mapy
Zastosowanie ZastosowaniePodgląd położenia, obliczenie odległości, kontrola strefy

Ta sama struktura obsługuje kontrahentów, magazyny i punkty odbioru — rozróżnia je wyłącznie rekord wskazany numerem referencyjnym.

Budowa tabeli — wykaz kolumn

Osiem kolumn dzieli się na dwie grupy: dane położenia oraz ustawienia prezentacji mapy.

Wykaz kolumn tabeli
KolumnaTypWymaganaZnaczenie
ETYKIETYbit
wartość logiczna 0/1
nieZnacznik decydujący, czy przy punktach mają być wyświetlane podpisy
GRUPOWANIEbit
wartość logiczna 0/1
nieZnacznik włączający łączenie sąsiadujących znaczników w jeden przy oddaleniu widoku
ID_MAPSint
liczba całkowita
takIdentyfikator wiersza tabeli
LATITUDEfloat
liczba zmiennoprzecinkowa
takSzerokość geograficzna
LONGITUDEfloat
liczba zmiennoprzecinkowa
takDługość geograficzna
REFNObigint
liczba całkowita 64-bitowa
takNumer referencyjny dla którego zapisywane są współrzędne geograficzne
SELECT_POIvarchar(max)
tekst bez limitu długości
nieDefinicja zapytania wybierającego punkty dodatkowe prezentowane razem z lokalizacją
ZOOMfloat
liczba zmiennoprzecinkowa
niePoziom przybliżenia mapy otwieranej dla tego rekordu

Współrzędne mają typ float. Jest to wystarczające do prezentacji na mapie, ale przy obliczeniach odległości i kontroli stref wymaga własnych wzorów — SQL Server oferuje do tego osobny typ przestrzenny geography.

Indeksy i wydajność zapytań

Odczyt odbywa się zawsze po numerze referencyjnym rekordu, dla którego otwierana jest mapa.

Indeksy zdefiniowane na tabeli
IndeksKolumnyRodzaj
PK__mapsID_MAPSklucz główny
REFNOREFNOunikalny

Indeks na kolumnie REFNO jest unikalny i pełni podwójną rolę. Przyspiesza odczyt, a jednocześnie wyklucza sytuację, w której jeden rekord ma dwa zapisane położenia — błąd tego rodzaju objawiałby się znacznikiem skaczącym po mapie między odświeżeniami.

Współrzędne jako liczby a typ przestrzenny — co z tego wynika

Zapis współrzędnych w dwóch kolumnach zmiennoprzecinkowych jest rozwiązaniem prostym i przenośnym. Ma jednak konsekwencje, które ujawniają się przy pytaniach wykraczających poza „pokaż punkt na mapie”.

Porównanie sposobów przechowywania lokalizacji
ZagadnienieDwie kolumny floatTyp geography
Pokazanie punktu na mapieWystarcza w zupełnościWystarcza
Obliczenie odległościWymaga własnego wzoru uwzględniającego krzywiznę ZiemiMetoda wbudowana zwraca wynik w metrach
Sprawdzenie, czy punkt jest w strefieKonieczne porównanie zakresów i własna logikaGotowa metoda sprawdzająca zawieranie się w obszarze
Wyszukanie najbliższych punktówPrzeszukanie zakresu współrzędnych, potem sortowanieIndeks przestrzenny obsługuje zapytanie bezpośrednio
Przenośność między bazamiPełna — to zwykłe liczbyOgraniczona do serwerów obsługujących ten typ

Przy kilkuset punktach różnica jest niezauważalna. Rośnie wraz z liczbą rekordów i złożonością pytań geograficznych.

W praktyce oznacza to prosty podział. Jeżeli mapa służy do pokazania, gdzie znajduje się kontrahent, obecne rozwiązanie w zupełności wystarcza. Jeżeli system ma planować trasy, kontrolować wjazd do strefy albo dobierać najbliższy magazyn, warto rozważyć kolumnę wyliczaną typu geography obok istniejących — nie wymaga to zmiany struktury, a otwiera dostęp do gotowych metod i indeksu przestrzennego.

Jak korzystać z tabeli w praktyce

Przy pracy z danymi lokalizacyjnymi sprawdzają się poniższe zasady:

  • Sprawdzaj zakres wartości przy imporcie — szerokość geograficzna mieści się w przedziale od −90 do 90, długość od −180 do 180.
  • Uważaj na zamianę kolumn miejscami; współrzędne Polski to szerokość około 52 i długość około 19, więc odwrócenie umieszcza punkt w Sudanie.
  • Nie przechowuj tu adresu tekstowego — jego miejsce jest w kartotece kontrahenta, a tabela mapowa ma odpowiadać wyłącznie za położenie.
  • Przy geokodowaniu adresów zapisuj datę operacji poza tą tabelą; adresy się zmieniają, a nieaktualne współrzędne wyglądają na poprawne.
  • Ustawiaj przybliżenie stosownie do zasięgu — mapa magazynu i mapa trasy krajowej wymagają różnych wartości.
  • Włączaj grupowanie znaczników tam, gdzie punktów jest wiele; kilkaset nachodzących na siebie znaczników czyni mapę nieczytelną.

Wyszukanie rekordów położonych w zadanym prostokącie współrzędnych — typowe zapytanie przy ograniczaniu widoku mapy do jednego regionu:

SELECT  m.REFNO,
        m.LATITUDE,
        m.LONGITUDE,
        m.ZOOM
FROM    dbo._maps AS m
WHERE   m.LATITUDE  BETWEEN @lat_min AND @lat_max
  AND   m.LONGITUDE BETWEEN @lon_min AND @lon_max
ORDER BY m.LATITUDE DESC, m.LONGITUDE;

Prostokąt współrzędnych jest tanim przybliżeniem obszaru. Do zapytania „punkty w promieniu X kilometrów” potrzebny jest już wzór uwzględniający krzywiznę Ziemi albo typ przestrzenny.

Dane lokalizacyjne mają jedną cechę odróżniającą je od reszty kartoteki: nie da się na oko sprawdzić, czy są poprawne. Błędna nazwa ulicy rzuca się w oczy, przestawione współrzędne — nie. Dlatego kontrola zakresów przy imporcie jest tu ważniejsza niż w większości innych struktur.

Powiązane tabele i dokumentacja

Dane mapowe uzupełniają punkty szczegółowe oraz struktury opisujące kontrahentów i dokumenty transportowe:

FAQ

Najczęściej zadawane pytania o tabelę _maps

01

Do jakich rekordów można przypisać współrzędne?

Do dowolnych. Powiązanie odbywa się przez numer referencyjny REFNO, który w StudioSystem identyfikuje rekord niezależnie od tabeli źródłowej. Ta sama struktura obsługuje więc kontrahentów, magazyny, punkty odbioru i zlecenia transportowe — bez zakładania osobnych tabel dla każdego przypadku.

02

Dlaczego indeks na REFNO jest unikalny?

Żeby jeden rekord nie mógł mieć dwóch zapisanych położeń. Bez tego ograniczenia dopisanie drugiego wiersza dałoby błąd trudny do zauważenia: znacznik skakałby po mapie między odświeżeniami, zależnie od tego, który wiersz został odczytany jako pierwszy.

03

Czy typ float wystarcza do przechowywania współrzędnych?

Do prezentacji punktu na mapie — tak. Ograniczenia pojawiają się przy obliczeniach: odległość, promień, kontrola wjazdu do strefy wymagają własnych wzorów uwzględniających krzywiznę Ziemi. SQL Server ma do tego osobny typ geography z gotowymi metodami i indeksem przestrzennym, który warto rozważyć przy rozbudowie funkcji transportowych.

04

Skąd biorą się punkty położone w zupełnie niewłaściwym miejscu?

Najczęściej z zamiany szerokości i długości miejscami przy imporcie. Dla Polski szerokość wynosi około 52, a długość około 19 — odwrócenie tych wartości umieszcza punkt w północnej Afryce. Druga częsta przyczyna to nieaktualne współrzędne pozostawione po zmianie adresu kontrahenta.

Słownik pojęć

Słownik pojęć

Pojęcia związane z lokalizacją i danymi geograficznymi w systemie.

GGeofencing
Wirtualna granica wokół obiektu. Przekroczenie jej przez pojazd automatycznie wyzwala zdarzenie w systemie, na przykład rejestrację wjazdu na plac.
TTelematyka GPS
Rejestracja pozycji i parametrów pracy pojazdu przekazywana do systemu transportowego. Pozwala potwierdzić realizację kursu i rozliczyć czas pracy kierowcy.
MMicrosoft SQL Server
Serwer relacyjnej bazy danych, na którym pracują aplikacje SoftwareStudio. Odpowiada za spójność danych, uprawnienia dostępu, kopie zapasowe i wydajność zapytań.
IIndeks bazodanowy
Struktura przyspieszająca wyszukiwanie wierszy w tabeli. Dobrze dobrane indeksy skracają czas zapytań, ale spowalniają zapisy i zajmują miejsce na dysku.
TTMS
Transportation Management System — system planowania i rozliczania transportu: przyjmuje zlecenia przewozowe, przydziela pojazdy i kierowców, planuje trasy i rozlicza koszty kursu.
KKartoteka kontrahentów
Wspólny rejestr dostawców i odbiorców, do którego odwołują się dokumenty we wszystkich modułach. Warunek spójności danych między systemami.
IIntegracja kurierska
Automatyczne przekazanie przesyłki do systemu przewoźnika wraz z wydrukiem etykiety i pobraniem numeru śledzenia.

Zobacz to w praktyce

Sprawdź, jak systemy SoftwareStudio oparte na MS SQL Server wspierają ten obszar Twojej firmy.