Eksperymentowałem z funkcjami przestrzennymi programu SQL Server i zauważyłem, że metoda STDistance
umożliwia określenie odległości między dwiema geometriami. Czy jest jakaś funkcjonalność, która pozwala mierzyć odległość między dwoma punktami za pośrednictwem dróg, takich jak Google Maps?Czy serwer SQL obsługuje odległość pomiaru przez trasy?
5
A
Odpowiedz
1
Tak, możesz ... Bądź uprzedzony, ponieważ wymaga to trochę pracy (co jest oczywiście "darmowe" w GIS, takie jak ArcGIS lub postGIS).
Zasadniczo myśl o tym, kiedy mierzysz odległość między dwoma punktami wzdłuż szeregu dróg (w przeciwieństwie do bezpośredniej odległości euklidesowej) w rzeczywistości przechodzisz przez sieć graph.
Więc trzeba
- obciążenia w swoich drogach (krawędzie wykres)
- ładunek na skrzyżowaniach (węzły wykres)
- obciążenie w punkcie A i Z
- Następnie użyj optymalnej trasy algorytm między A i Z, idący wzdłuż krawędzi, ale przez węzły.
Jest w głębi post tutaj wyjaśniając: Roads in SQL Server 2008 ale trzeba zaczepić w algorytmie routingu stąd Djkstra in SQL.
Kod do generowania sieci dróg z witryny Alastaira (powyżej) jest duplikowany na wypadek, gdyby kiedykolwiek odszedł.
DECLARE @Roads TABLE (
RoadId int,
RoadName varchar(32)
);
INSERT INTO @Roads VALUES
(1, 'Britannia Road'),
(2, 'Belsize Road'),
(3, 'Vincent Road'),
(4, 'Plumstead Road');
DECLARE @RoadSegments TABLE (
SegmentId int,
RoadId int,
SegmentGeometry geography
);
INSERT INTO @RoadSegments VALUES
(1, 1, 'LINESTRING(1.313772 52.636871, 1.315038 52.635229)'),
(2, 1, 'LINESTRING(1.315038 52.635229,1.316052 52.63399,1.316401 52.633518)'),
(3, 1, 'LINESTRING(1.316401 52.633518,1.316497 52.632869,1.316642 52.632542)'),
(4, 2, 'LINESTRING(1.317538 52.632697,1.317307 52.633448,1.317098 52.633749)'),
(5, 3, 'LINESTRING(1.31734 52.633818,1.315982 52.635498,1.315038 52.635229)'),
(6, 4, 'LINESTRING(1.314546 52.633479,1.31529 52.633298,1.315902 52.633363,1.316401 52.633518)'),
(7, 4, 'LINESTRING(1.316401 52.633518,1.317097 52.633749)'),
(8, 4, 'LINESTRING(1.317098 52.633749,1.31734 52.633818)'),
(9, 4, 'LINESTRING(1.31734 52.633818,1.318332 52.634119)');
DECLARE @RoadIntersections TABLE (
IntersectionId varchar(32),
IntersectionLocation geography
);
INSERT INTO @RoadIntersections VALUES
('A', 'POINT(1.315038 52.635229)'),
('B', 'POINT(1.316401 52.633518)'),
('C', 'POINT(1.317097 52.633749)'),
('D', 'POINT(1.31734 52.633818)');
DECLARE @RoadIntersection_Segments TABLE (
IntersectionId varchar(32),
SegmentId int
);
INSERT INTO @RoadIntersection_Segments VALUES
('A',1),
('A',2),
('A',5),
('B',2),
('B',6),
('B',3),
('B',7),
('C',7),
('C',4),
('C',8),
('D',5),
('D',8),
('D',9);
Powiązane problemy
- 1. Czy kąt2 obsługuje stany/trasy zagnieżdżone?
- 2. Czy serwer Foxx/ArangoDB obsługuje Socket.IO?
- 3. Odległość przesunięta przez Accelerometer
- 4. Serwer SQL: numer_wiersza podzielony przez timeout
- 5. Czy Ember.js obsługuje IE6?
- 6. Serwer SQL - czy można wykonać procedurę składowaną
- 7. Czy JPA obsługuje mapowanie do widoków sql?
- 8. Serwer SQL - metadane tabeli
- 9. Jak obliczyć odległość trasy między wieloma punktami GeoJSON w MongoDB?
- 10. Czy serwer sql compact nadal limit 4gb
- 11. Wykrywanie, czy serwer SQL jest uruchomiony
- 12. Sprawdź, czy podłączony serwer SQL działa
- 13. Serwer SQL - zawiera niepoprawny identyfikator XML wymagany przez FOR XML;
- 14. Operatory blokujące serwer sql
- 15. Serwer Sql TOP - używany?
- 16. Serwer SQL: IsCharAlpha
- 17. Serwer SQL - Pętla przez każdą kolumnę w każdej tabeli?
- 18. Serwer Sql - rekursywne usuwanie
- 19. Serwer programistyczny Django nie obsługuje żądania ajaxowego
- 20. Określanie obsługiwanej wersji HTTP przez serwer WWW
- 21. SELECT COUNT (*) Serwer SQL
- 22. Serwer SQL do PostgreSta
- 23. Serwer SQL ARITHABORT
- 24. Czy Catboost obsługuje python3?
- 25. Czy Postgresql plpgsql/sql obsługuje zwarcie w klauzuli where?
- 26. SQL Server 2008 Geografia .STBuffer() jednostki pomiaru odległości
- 27. Czy mogę zamontować inny program obsługi trasy przez __meteor_bootstrap__.app?
- 28. Czy Selenium RC obsługuje IE8?
- 29. Serwer Xampp MS SQL PHP 5.6
- 30. Serwer Socket.io nie jest obsługiwany przez serwer Node.js
Czy masz na myśli coś na linii różnych punktów, a następnie używając 'STLength'? – ZLK
Nie jest wbudowany w SQL Server, ponieważ SQL Server nie zawiera atlasu drogowego świata. – Dai
@Dai Nawet przy wszystkich właściwych danych wielokąta/punktów nie widzę, żeby SQL Server mógł to zrobić bardzo dobrze. Pozostaw to w dedykowanej aplikacji do mapowania. – iamdave