возможно ли сделать так, чтобы темы автоматически

0 голосов
спросил 08 Май, 09 от zinokk (420 баллов) в категории Программные продукты Esri
    помогите пожалуйста студентке)))
делаю программку, которая должна мониторить движение..ну естественно   показывать имитацию этого. так вот надо показать, что точка ( транспортное средство) передвигается по улице. у меня возникла идея, что может это можно сделать посредством постоянно автоматически включающихся и выключающихся тем.

Тему про динамическое обновление вида читала, это в общем то то что надо, только экран мерцает тогда слишком сильно!!! в глазах рябит!

Может есть еще какой способ осуществить данную задачу?

9 Ответы

0 голосов
ответил 08 Май, 09 от TDenis (42,620 баллов)
Этож сколько у вас будет тем? Или сделать две темы, в невидимую рисовать, и потом её подключать? А когда подключаешь тему, экран разве не мерцает?
А графикой не устроит? Насколько я помню, движущиеся объекты можно рисовать графикой, мерцать не должно, но слой удобнее тем, что там можно писать сразу кучу разных параметров объекта.
0 голосов
ответил 08 Май, 09 от zinokk (420 баллов)
    если честно, то в области arcview я полный ламер ((( если можно, то чуть по подробнее )))
0 голосов
ответил 08 Май, 09 от BigSerg (4,080 баллов)
поищи внимательно - я как то выкладывал здесь скрипт пробег точки вдоль линии - но мерцание экрана есть конечно
0 голосов
ответил 08 Май, 09 от TDenis (42,620 баллов)
https://forum.esri-cis.ru/index.php?qa=14571
Вот здесь этот скрипт, в нём можно попробовать закомментировать строчку:
vid.Invalidate
Тогда слои не мерцают, мерцать будет только графика. Но думаю, должны быть и другие варианты. Может быть стоит попробовать рисовать прямо в дисплей (Display.DrawCircle), но могут быть проблемы со стриранием предыдущего местоположения объекта, навскидку уже не скажу.
0 голосов
ответил 08 Май, 09 от zinokk (420 баллов)
    Всем спасибо!!!!! использовала скрипт движения точки вдоль линии от BigSerg, только убрала оттуда строчку
vid.Invalidate, как и предлагает TDenis. Работает идеально!! прям как надо!!! image
0 голосов
ответил 10 Май, 09 от zinokk (420 баллов)
а ожно еще сделать вот как?
чтобы одновременно несколько точек двигались? по разным линиям?
0 голосов
ответил 10 Май, 09 от TDenis (42,620 баллов)
Да легко. Рисуете вторую линию и...

vid = av.GetActiveDoc
pl = vid.GetGraphics.Get(0)
pl2 = vid.GetGraphics.Get(1)
pl = pl.GetShape
pl2 = pl2.GetShape

step = 0.1

for each i in 1..1000
  vid.Draw(vid.GetDisplay)
  pnt = pl.Along(step)
  pnt2 = pl2.Along(step)
  if (step * 1.8 < 100) then
    pnt3 = pl2.Along(100 - (step * 1.8))
  else
    pnt3 = pl2.Along((step * 1.8) - 100)
  end
  pnt4 = pl2.Along(100 - (step / 1.5))
 
  if (vid.GetGraphics.HasSelected ) then
      vid.GetGraphics.ClearSelected
  end
 
  gsh = GraphicShape.Make(pnt)
  gsh2 = GraphicShape.Make(pnt2)
  gsh3 = GraphicShape.Make(pnt3)
  gsh4 = GraphicShape.Make(pnt4)
  vid.GetGraphics.Add(gsh)
  vid.GetGraphics.Add(gsh2)
  vid.GetGraphics.Add(gsh3)
  vid.GetGraphics.Add(gsh4)
 
 
 
  gsh.Select
  gsh2.Select
  gsh3.Select
  gsh4.Select
  step = step+0.1
end
if (vid.GetGraphics.HasSelected ) then
  vid.GetGraphics.ClearSelected
end
return nil

А ещё можно написать библиотеку на C++, которая бы принимала данные, скажем, из NMEA GPS-приёмника, разбирала бы эти данные, и отсылала координаты в ArcView, где они бы выводились на карту. А ещё можно класть координаты объекта в базу ArcGIS Server (SDE), и неограниченное число клиентов (ArcView, ArcMap или другие) брали бы данные с этого сервера. Но это, как говорится, уже совсем другая история ;-)
0 голосов
ответил 10 Май, 09 от zinokk (420 баллов)
TDenis вы просто гений!!!!
Спасибо большое!!!
Про библиотеку на С++ это безусловно интересно! и было бы идеально для моего диплома.. но для меня это сложно, сама сделать совсем не смогу (((
0 голосов
ответил 10 Май, 09 от TDenis (42,620 баллов)
Да всегда пожалуйста. Эх, жаль, что вы не работодатель)) Особенно после таких слов)
Удачи вам с дипломом!
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...