Я экспериментировал с пространственными функциями SQL Server и видел, что метод STDistance
позволяет определить расстояние между двумя геометриями. Есть ли какая-либо функциональность, позволяющая измерять расстояние между двумя точками через дороги, например, Карты Google?Поддерживает ли SQL Server измерение расстояния по маршрутам?
5
A
ответ
1
Да, вы можете ... Будьте предупреждены, так как это требует некоторой работы (которая, конечно, «бесплатна» вам в ГИС, такой как ArcGIS или postGIS).
В основном подумайте, когда вы измеряете расстояние между двумя точками вдоль ряда дорог (в отличие от прямого евклидова расстояния), вы фактически пересекаете сеть graph.
Так что вам нужно
- нагрузки на ваших дорогах (график края)
- нагрузки в пересечениях (вершин графа)
- нагрузки в точке A и Z
- Затем с помощью оптимальной маршрутизации алгоритм между А и Z, идущий по краям, но через узлы.
Существует в глубокий пост здесь объясняя это: Roads in SQL Server 2008 но вам нужно подключить в алгоритме маршрутизации здесь Djkstra in SQL.
Код для создания сети дорог с сайта Alastaira (см. Выше) дублируется, если он когда-либо уходит.
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);
Смежные вопросы
- 1. Поддерживает ли XAMPP SQL Server?
- 2. Измерение расстояния для алгоритмов
- 3. Измерение расстояния между векторами
- 4. Измерение расстояния между пиками
- 5. Измерение расстояния в Google Maps
- 6. Поддерживает ли SQL Server специальные символы?
- 7. Измерение расстояния между цветами HSL
- 8. Поддерживает ли SQL Server 2k5 блокировку подсказок по связанным серверам?
- 9. RadBeacon Измерение расстояния между метками
- 10. Измерение расстояния в обработке изображений
- 11. Измерение расстояния до GPS GPS
- 12. Измерение короткого расстояния android GPS
- 13. Поддерживает ли SQL Server ОТКЛЮЧЕНИЕ FROM FROM?
- 14. Поддерживает ли поддерживающие скобки SQL Server Compact?
- 15. Поддерживает ли SQL Server многогрупповую кластеризацию?
- 16. Поддерживает ли MVC6 Sql Server Dependency Cache
- 17. Поддерживает ли SQL Server округление или усечение?
- 18. Поддерживает ли Sql Server CE многопоточность?
- 19. Поддерживает ли репликация SQL Server этот сценарий?
- 20. Поддерживает ли SQL Server 2005 datetime2
- 21. Поддерживает ли SQL Server 2012 аутентификацию Kerberos?
- 22. Поддерживает ли SQL Server хэш-разбиение?
- 23. Поддерживает ли SQL Server нотацию BNF?
- 24. Поддерживает ли MvcSiteMapProvider состояние сеанса Sql Server?
- 25. Поддерживает ли log4net AdoNetAppender SQL Server 2008?
- 26. Измерение расстояния между двумя точками Lat/Lng
- 27. Измерение расстояния между точками по ID в spartstat
- 28. Как SQL Server поддерживает соединения?
- 29. Spotfire - Измерение расстояния между двумя точками (линейка)
- 30. Оптимизация запроса функции расстояния - SQL Server 2005
Вы имеете в виду как linestring разных точек, а затем используете 'STLength'? – ZLK
Не встроен в SQL Server, потому что SQL Server не поставляется с мировым атласом дорог. – Dai
@ Дай Даже со всеми правильными данными о полигонах/точках я не вижу, чтобы SQL Server мог делать это очень хорошо. Оставьте его в специальном приложении сопоставления. – iamdave