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.
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.