Bedste datingsider i danmark Favrskov

Первое, что нужно сделать – это загрузить слой дорог в базу.

При этом будем загружать только полилинии имеющие следующие значения атрибута HIGHWAY: Очень короткие дороги во дворахservice Короткие дороги Tertiarytertiary_linkresidentialunclassified Протяжённые дорогиsecondary Магистрали, трассы, проспекты, шоссеmotorwayprimarytrunk Развязкиtrunk_linksecondary_linkmotorway_linkprimary_link Этим мы ограничиваем построение маршрута только по автомобильным дорогам. PI) (y2 — y1) * (y2 — y1)); Здесь (x1,y1) и (x2, y2) – координаты начала и конца отрезка линии. После того, как заполнены таблицы Feature и Points запускается хранимая процедура для построения графа. Как известно, слой дорог из Open Street Map устроен таким образом, что перекрёстками являются точки начала или конца одной из полилиний и только они.

От графа заданного упорядоченными парами вершин, его отличает, только то, что в данном случае граф задаётся упорядоченными наборами из 2-х и более вершин.

bedste datingsider i danmark Favrskov

Ранги вершинам присваиваются по следующему алгоритму. Вершинам начала и конца полилинии присваивается ранг в соответствии с значением атрибута HIGHWAY.В третьем запросе удаляются все точки, которые не являются перекрёстками. kontaktanzeigen online Hamburg После выполнения всех запросов в таблицах Points и Vertex содержится граф.В качестве визуальной подложки карты в программе формируется изображение, получаемое из тайлов с сервера Open Street Map.Так же возможна загрузка изображения тайлов с серверов Google Map, Яндекс Карты и некоторых других.

Bedste datingsider i danmark Favrskov

В данной заметке рассказывается о применении алгоритма Дейкстры нахождения кратчайшего маршрута по графу дорог из Open Street Map.Слой дорог брался из проекта Gis-Lab – “Данные Open Street Map по регионам РФ в форматах shape и OSM XML”. Оболочка программы написана на C#, слой дорог загружается в базу MS SQL Server 2005 (SQLEXPRESS), все алгоритмы реализованы в виде хранимых процедур на T-SQL.Примерно, после 10 минут работы модуль выдал сообщение, что маршрут построить не удалось.Когда я задал начальную и конечную точку, расположенные на меньшем расстоянии друг от друга, Road Graph всё-таки проложил маршрут. Маршрут пролегал через Битцевский парк, по пешеходным тропинкам и велодорожкам, меня же интересовал автомобильный маршрут. Маршрут по Москве, по автомобильным дорогам составляется примерно в течении 30 секунд.В этом случае избыточность не приводит к заметному замедлению работы алгоритма.

Следующим шагом присвоим каждой вершине некоторое значение ранга, в зависимости от типа дороги. Предлагаются следующие ранги: Очень короткие дороги Service = -1Короткие дороги Tertiary = 1tertiary_link= 1residential= 1unclassified= 1Протяжённые дороги Secondary = 3Магистрали, трассы, проспекты, шоссе Motorway = 3Primary = 3Trunk = 3Развязкиtrunk_link =3secondary_link = 3motorway_link = 3primary_link = 3Принцип деления дорог такой.Для работы с shape-файлами использовалась библиотека Sharp Map. При этом, отнюдь не все точки из таблицы Points являются перекрёстками.Слой дорог будем хранить в следующих таблицах:-Линииcreate table Feature(OSM_ID int not null, -ID из карты Open Street Map street Name varchar(max), -Название улицы Geometry varbinary(max), -Полилиния в бинарном формате x1 float, -долгота нулевой точки полилинии y1 float, -широта нулевой точке полилинии x2 float, -долгота последней точки полилинии y2 float, -широта последней точки полилинии oneway int default(0), -признак одностороннего движения: 0 – двустороннее 1- одностороннее движение HIGHWAY varchar(250), -Атрибут из Open Street Map num Poins int, -Число точек в полилинии constraint pk_Feature primary key (OSM_ID) on [primary]) on [primary]GO -Точки линииcreate table Points(id int identity(1,1), OSM_ID int not null, -ID полилинии num Point int, -Номер точки в полилинии Weight float, -Расстояние от точки до начала полилинии в километрах num Vertex int, -Номер вешины графа x float, -Широта y float, -Долгота Rang int default(0), oneway int default(0), constraint pk_Points primary key (id) on [primary]) on [primary]GO-Вершины графаcreate table Vertex(num Vertex int identity(1,1), x float, y float, Weight float default(0), Weight1 float default(0), OSM_ID int default(0), OSM_ID1 int default(0), Parent int default(0), is Bad int default(0), Parent1 int default(0), is Bad1 int default(0), Rang int default(0), constraint pk_Vertex primary key (num Vertex) on [primary]) on [primary]GOПри загрузке файла в базу MS SQL заполняются только таблицы Feature и Points , причём поле num Vertex заполняется нулём, поскольку номера вершин графа ещё неизвестны. Для заполнения таблицы вершин используем следующий запрос:insert into Vertex (x, y)select distinct v.x, v.yfrom(select x1 x, y1 y from Feature (nolock)unionselect x2 x, y2 y from Feature (nolock)) v Ключевое слово distinct указывает на то, что в результирующем наборе данных будут только неповторяющиеся пары x и у.Поле Weight – длина в километрах вычисляется в программе на C# по формуле: Weight = Weight 111,11 * Math. Таким образом, мы получаем таблицу узлов графа, поле num Vertex таблицы Vertex содержит номер вершины, начиная с единицы. Для этого используем следующие запросы:update Points set num Vertex = 0update Pointsset Vertex = Vertexfrom Points inner join Vertex (nolock)on Points.x = Vertex.x and Points.y = Vertex.ydelete from Points where num Vertex = 0В первом запросе все номера вершин полагаются равными нулю.Во втором запросе номер вершины берётся из таблицы Vertex, вершина определяется по совпадению координат x, y в таблицах Points и Vertex.

Add comment

Your e-mail will not be published. required fields are marked *