Задача в следующем.
Требуется найти кратчайший путь от двух произвольно выбранных точек. Делается следующее. Имеем слой созданный на основе слоя "Геонимы", слой представлен узлами и участками для реализации метода поиска кратчайшего пути. Во время выполнения произвольно выбираем две точки (в цикле) и достраиваем узел и участок, к нашему слою предварительно определив ближайшие узлы на слое для каждой из двух точек. Таким образом, получаем структуру графа с начальной и конечной точками. После определения кратчайшего пути удаляем ранее созданные объекты (два узла и два участка) и т.д. Это по существу. Теперь о проблеме.
В случае физического изменения слоя, т.е. не выгруженного в память, путь определяется нормально, но тут есть свои нежелательные моменты - скорость выполнения, что важно!, и есть вероятность испортить слой при возникновении некоторых сбойных моментов во время выполнения - оставить не удаленными созданные объекты на слое, даже при выполнении всех обработок исключительных ситуаций. Что касаемо слоя выгруженного в память то первый путь между первыми двумя точками определяется корректно, но при последующих - нет! Поиск определяет часть старого пути плюс путь между созданным узлом и узлом слоя. Другими словами определяемое количество ключей входящих в путь остается тем же что и в самом первом проходе. Действия производятся те же, создание и удаление, при новой итерации цикла. Одно отличие, при работе со слоем на физическом уровне ключи создаваемых элементов постоянно увеличиваются на единицу даже при удалении, при работе со слоем в памяти, при удалении ключ будет тем же что и созданный ранее... Предпринималось обеспечить такой же принцип создания ключей как на физическом уровне, но это не помогло... Куда копать дальше?
За ранее спасибо!
Юра ИАЦ
Требуется найти кратчайший путь от двух произвольно выбранных точек. Делается следующее. Имеем слой созданный на основе слоя "Геонимы", слой представлен узлами и участками для реализации метода поиска кратчайшего пути. Во время выполнения произвольно выбираем две точки (в цикле) и достраиваем узел и участок, к нашему слою предварительно определив ближайшие узлы на слое для каждой из двух точек. Таким образом, получаем структуру графа с начальной и конечной точками. После определения кратчайшего пути удаляем ранее созданные объекты (два узла и два участка) и т.д. Это по существу. Теперь о проблеме.
В случае физического изменения слоя, т.е. не выгруженного в память, путь определяется нормально, но тут есть свои нежелательные моменты - скорость выполнения, что важно!, и есть вероятность испортить слой при возникновении некоторых сбойных моментов во время выполнения - оставить не удаленными созданные объекты на слое, даже при выполнении всех обработок исключительных ситуаций. Что касаемо слоя выгруженного в память то первый путь между первыми двумя точками определяется корректно, но при последующих - нет! Поиск определяет часть старого пути плюс путь между созданным узлом и узлом слоя. Другими словами определяемое количество ключей входящих в путь остается тем же что и в самом первом проходе. Действия производятся те же, создание и удаление, при новой итерации цикла. Одно отличие, при работе со слоем на физическом уровне ключи создаваемых элементов постоянно увеличиваются на единицу даже при удалении, при работе со слоем в памяти, при удалении ключ будет тем же что и созданный ранее... Предпринималось обеспечить такой же принцип создания ключей как на физическом уровне, но это не помогло... Куда копать дальше?
За ранее спасибо!
Юра ИАЦ