В шейпе темы Polyline делаю SetValue и...

0 голосов
спросил 13 Апр, 04 от Гость (210,080 баллов) в категории Программные продукты Esri
Подскажите, плз.
Есть у меня тема, в которой одна линия. Соответственно в таблице аттрибутов одна запись типа Polyline, Id=0. Линия создана вручную. Хочу её перерисовать в своих координатах.
Делаю вот так:
l = PolyLine.Make({{p1,xlast@ylast}})
...
'изменения в main_line
MLsrc = SrcName.Make (projDir + "shapes\main_line.shp")
MainLineFTab = FTab.Make(MLsrc)
if (MainLineFTab.IsEditable.Not) then
MainLineFTab.SetEditable(TRUE)
MainLineFTab.StartEditingWithRecovery
MainLineFTab.SetValue(MainLineFTab.findField("Shape"), 0, l)
MainLineFTab.StopEditingWithRecovery(TRUE)
end
theView.Invalidate

После этого вроде бы должна на место старой линии встать новая, с координатами (p1,xlast@ylast) - точки имеют координаты в значениях проекции, т.е. ненулевые и не nil.
На самом деле просто стирается с вида старая линия, новая не рисуется. Если сделать экстент по этой теме, будет пустое место с масштабом 0. В таблице атрибутов, как и прежде, одна запись, ну это так и должно быть.
Кто-нибудь может сказать с определённостью, что не так? В другом проекте ТОЧНО такой же скрипт делает всё как надо... Может, тему как-то по-другому надо создать?

14 Ответы

0 голосов
ответил 13 Апр, 04 от Vedmak (2,340 баллов)

В данном случае такая ситуация обязательно возникнет, если p1=xlast@ylast. Создается null полилиния.

0 голосов
ответил 13 Апр, 04 от bodom (660 баллов)
Нет, в том и дело.
p1<>p2, в отладчике l прописываается как 2, а не как null или nil...
0 голосов
ответил 13 Апр, 04 от Vedmak (2,340 баллов)
Ага, значит работаем в спроектированном виде? Какая проекция стоит? И не использовал ли в скрипте ReturnProjected (ReturnUnprojected)?
0 голосов
ответил 13 Апр, 04 от bodom (660 баллов)
Ээээх, про проекции я даже отдельную тему сделал тут же... Проекция трансверс меркатор. Первая точка получена именно через ReturnProjected, иначе линия получается длиной в 6млн метров....
0 голосов
ответил 13 Апр, 04 от Vedmak (2,340 баллов)
Ну тут поаккуратнее надо :). Если так берешь первую точку, то вторая должна быть в той же проекции. Это понятно. Попробуй скопировать свою тему после преобразования в новый неспроектированный вид. Посмотри, что получилось в реале. Скорее всего эта линия просто выходит за рамки проекции и не отображается в виде...
0 голосов
ответил 13 Апр, 04 от bodom (660 баллов)
То, что они д.б. в одной проекции, я понимаю...
Первая точка берётся из точечной темы, в которой мне чертовски необходимо задавать координаты точки в десятичных градусах (других координат я не знаю :)). Сконвертить её раз навсегда в нормальные метры у меня тоже не получается, см. тему про проекции...
Вторую точку я получаю от мышки - GetUserPoint. Она получается, как я понял, в единицах проекции.
После проецирования первой точки имею, к примеру: p1 (-10000, 6*10^6), p2(10000, 6*10^6). Вроде всё в шоколаде, ан нет...
На самом деле, думаю, если получится первую точку/тему грамотно засейвить в метрах, то....
0 голосов
ответил 13 Апр, 04 от Vedmak (2,340 баллов)

Ну правильно все говоришь...

первую точку определяем так:

aPoint = aFtab.ReturnValue(aFtab.FindField("Shape"),rec).ReturnProjected(aView.GetProjection)

вторую - считываем с мышки...

 

0 голосов
ответил 13 Апр, 04 от bodom (660 баллов)
Дык....
Скорее всего эта линия просто выходит за рамки проекции и не отображается в виде...

Если она действительно выходит, что мне с ней делать-то дальше? image
0 голосов
ответил 13 Апр, 04 от Vedmak (2,340 баллов)

Выходит она только в том случае, если ты не видишь в виде стартовой точки (конечную-то - по-любому видишь). Если это так, и ты уверен в верности определения координат точек - придется менять проекцию вида... Но мне сдается, что что-то с координатами напутал. Проверь подробнее каждый шаг.

0 голосов
ответил 13 Апр, 04 от bodom (660 баллов)
Ок, дома поковыряю...
Спасибо, и до следующей итерации! image
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...