• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dane przestrzenne w bazie MySQL - połączenia kolejowe

Object Storage Arubacloud
0 głosów
191 wizyt
pytanie zadane 10 września 2016 w SQL, bazy danych przez Janusz92 Bywalec (2,150 p.)
edycja 10 września 2016 przez Janusz92

Witam

Tworzę bazę danych MySQL opartą o dane przestrzenne w powiązaniu z PHP. Mój projekt dotyczy połączeń kolejowych (wyszukiwanie, wyświetlanie mapy etc.).

Niezbędne dane które muszę przechować w bazie to dane przestrzenne połączeń (fizycznie torów, choć w pewnym uproszczeniu) i stacji.

W mojej bazie połączenia są reprezentowane przez linie (LINESTRING), a stacje przez punkty (POINT) w układzie kartezjańskim. Każda stacja należąca do danego połączenia leży dokładnie na jego linii, w innym wypadku uważam, że dana stacja nie należy do tego połączenia - na ten moment tak to sobie zaprojektowałem (nie jest powiedziane, że musi tak być).

Potrzebuję pomocy przy skonstruowaniu zapytań wyszukujących opartych o funkcje przestrzenne dostarczane przez MySQL. Główny mój problem stanowi wyszukanie dokładnej, najkrótszej (w późniejszym czasie także najszybszej) ścieżki pomiędzy stacją początkową, a stacją docelową. Schody zaczynają się kiedy stacja początkowa i stacja docelowa nie leżą na tym samym połączeniu - nie należą do tego samego LINESTRING.

Często także ścieżka ze stacji A do stacji B będzie prowadziła przez stykające się ze sobą połączenia, a czasami nawet nie stykające się. Postaram się to zobrazować opisując screen.

mapa połączeń kolejowych mysql spatial

Powyżej widnieje prosty zestaw połączeń i stacji.

Nie jest trudno wykorzystując funkcje przestrzenne wybrać odcinek od stacji leżących na tym samym LINESTRING, gorzej gdy mam zrobić zapytanie, które połączy mi np. stację 4 ze stacją 10, lub stację 4 ze stacją 8. Wynikowe zapytanie na ten moment ma mi zwracać zestaw współrzędnych odcinków, które będą reprezentowały całkowitą ścieżkę ze stacji początkowej do stacji końcowej. Inaczej mówiąc, tak abym mógł przedstawić graficznie naszą trasę na zielono.

Nie mącę na razie kodem, ani sql, ani php, gdyż problem leży tutaj w dużej mierze w skonstruowaniu logiki i przełożeniu jej na zapytanie. Dotychczas używałem głównie funkcji: ST_Intersects(), ST_Union(), ST_Intersection(), ST_Contains(), ST_StartPoint(), ST_EndPoint()

Chciałbym oczywiście, aby jak największa część pracy była wykonywana przez bazę danych.

Mogę w razie czego przedstawić jak wyglądają moje tabele, czy też jakie zapytania skonstruowałem do tej pory, ale tymczasem tak jak pisałem wyżej.

Moja wersja MySQL: 5.7.11

Będę wdzięczny za każdą pomoc, wskazówkę. Dzięki z góry.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
2 odpowiedzi 295 wizyt
0 głosów
1 odpowiedź 136 wizyt
pytanie zadane 22 stycznia 2019 w PHP przez chmod96 Obywatel (1,380 p.)
0 głosów
2 odpowiedzi 1,779 wizyt

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...