Проблема с картой

0 голосов
спросил 12 Янв, 11 от Dargin (2,080 баллов) в категории Программные продукты Esri
Есть карта города с домами, проблема в том что при изменении масштаба, либо при перемещении по карте происходит непонятное...вот скрины...
нормальный вид:
image

непонятное:
image

Доскажите может как то исправить можно.
Карты была создана при помощи GPSmapedit и переведена в shp при помощи PTxt2shp.

27 Ответы

0 голосов
ответил 20 Фев, 11 от Dargin (2,080 баллов)
to Dargin:
Забросьте глючный шейп на olha4<гав>mail.ru

    Бросил...
0 голосов
ответил 20 Фев, 11 от geouser (9,040 баллов)
Дорогие друзья и коллеги у меня к вам будет такая вот просьба.

Если кто то, что то не знает то это не стыдно, форум создан для того

чтобы задавать вопросы, и люди (гисовцы) помогали друг другу отвечая

на их вопросы. Не надо грубить.


Вы, г-н PORTER, довольно регулярно задаёте вопросы, после чего снисходительно высасываете ответы участников форума, и потом тихонечко себе сваливаете в пустоту до следующего прорыва канализации "во всех направлениях ГИС". Не потрудившись ни продолжить свою же тему из элементарной вежливости, ни даже сказать "спасибо". Который раз наблюдаю одно и то же. Странно от Вас слышать правила хорошего тона, ей богу. Здесь не бесплатная техподдержка для Вас лично, научитесь уважать чужой труд если самому работать лень.

https://forum.esri-cis.ru/index.php?qa=38210
https://forum.esri-cis.ru/index.php?qa=38430
https://forum.esri-cis.ru/index.php?qa=38047
... список можно продолжать и дальше ...

0 голосов
ответил 24 Фев, 11 от Dargin (2,080 баллов)
to Dargin:
Забросьте глючный шейп на olha4<гав>mail.ru

    все получилось... выражаю благодарность....
Помог 1 пункт из:
"Значит, почистить темы можно следующим способом:
1. Если перевести тему в режим редактирования, то можно выделить все объекты и скопировать их в буфер обмена. Затем создать новую полигональную тему и вставить все объекты из буфера. Новая тема будет уже корректно отображаться, но атрибутики исходной темы в ней не будет. Чтобы присвоить атрибутику объектов первой темы объектам новой темы,можно воспользоваться стандартным расширением "Мастер пространственных операций". Там есть функция присвоения значений по местоположению (последняя в списке операций). Указываете, в какую тему записывать атрибуты и из какой темы взять атрибуты - в итоге в новой теме будут созданы все необходимые поля и заполнены. Но все полигоны корректно при этом не обработаются, так как в теме присутствуют вложенные объекты (маленькие полигоны в большом полигоне). Можно выкрутиться так: из исходной темы сначала сделать две темы с таким условием, что вложенных объектов в каждой теме не будет. Потом для каждой темы повторить шаги, описанные выше. В итоге получите две новых темы с корректной атрибутикой. При желании эти две новые темы можно объединить в одну, используя тот же Мастер пространственных операций.
   Можно немного другим путем пойти: меняете масштаб, пока весь экстент не закрасится. Располагаете рядом атрибутивную таблицу и начинаете в ней выделять объекты, пока заполняющий экран полигон не подсветится желтым (то есть цветом выборки). Тему затем переводим в режим редактирования, вырезаем в буфер обмена выделенный полигон и снова вставляем и задаем атрибутику. Этот полигон уже будет корректным, но неизвестно сколько таких глючных полигонов присутствует в теме, поэтому операцию возможно придется повторять не однократно.
    Или так сделать: выделить группу полигонов с одинаковой атрибутикой, вырезать их и снова вставить, и задать атрибуты всем новым полигонам через Калькулятор поля.
2. Следующий способ. Поскольку информация в шейпфайле хранится в градусах, нужно сконвертировать тему в шейпфайл, например, в метрах. Затем можно использовать модуль Edit Tools (есть на сайте ESRI.com). Там есть операция CLEAN (чистка). Она тоже исправляет геометрию.
Удачи!"
    
0 голосов
ответил 24 Фев, 11 от Dargin (2,080 баллов)
Чтобы присвоить атрибутику объектов первой темы объектам новой темы,можно воспользоваться стандартным расширением "Мастер пространственных операций". Там есть функция присвоения значений по местоположению (последняя в списке операций). Указываете, в какую тему записывать атрибуты и из какой темы взять атрибуты - в итоге в новой теме будут созданы все необходимые поля и заполнены.

"Мастер пространственных операций" - это я так понял Spatial Analyst но там последняя строчка не активна а активна Tabulate Areas выбираю с какого слоя хочю взять атрибуты, затем выбираю поле...выбираю слой куда вставить атрибуты...и поле в которое надо вставить...жму ОК...появляется окно "Temporary Grid Specification"...тут что делать то???
Или я вообще не там все делаю???
0 голосов
ответил 24 Фев, 11 от S.E. (12,840 баллов)
Не, Мастер пространственных операций - это Geoprocessing
0 голосов
ответил 24 Фев, 11 от Lord (3,920 баллов)
' Имя модуля    "Themes.CopyToShapeNew"
' Для работы необходимо
' В исходных темах выделить необходимые объекты и сделать эти темы активными
' При нажатой клавише Ctrl при копировании из точечной темы в точечную
' обновляются поля: IDENT, ID_PNT, X_PNT, Y_PNT
aView = av.getactivedoc
BaseTheme=aView.GetEditableTheme
CtrlKey=System.IsControlKeyDown
if (BaseTheme=Nil) then
MsgBox.error("Нет принимающей темы включенной на редактирование!"+NL+
      " Копирование не проводится!","Копирование объектов")
exit
end
BaseFtab=BaseTheme.GetFtab
bClassName=BaseFtab.GetShapeClass.GetClassName
if (bClassName="Polygon") then bClass=3
elseif ((bClassName="Line") or (bClassName="PolyLine")) then bClass=2
elseif ((bClassName="Point") or (bClassName="MultiPoint")) then bClass=1
else bClass=0
end
theThemes=aView.GetActiveThemes
ShapeNew=BaseFtab.FindField("Shape")

if (bClass=1) then 'принимающая тема точечная
si=BaseFtab.FindFIeld("IDENT")
if (si = Nil) then
    fld=Field.Make("IDENT",#FIELD_CHAR,20,0)
    fld.SetAlias("Объект") BaseFtab.AddFields({fld})
    si=BaseFtab.FindFIeld("IDENT")
end
fL1=BaseFtab.FindField("ID_PNT")
if (fL1=nil) then
    fL1=Field.Make("ID_PNT",#FIELD_CHAR,8,0)
    BaseFtab.AddFields({fL1})
    fL1.SetAlias("№_т.")
    fL1=BaseFtab.FindField("ID_PNT")
end
fL2=BaseFtab.FindField("Y_PNT")
if (fL2=nil) then
    fL2=Field.Make("Y_PNT",#FIELD_FLOAT,14,3)
    BaseFtab.AddFields({fL2})
    fL2.SetAlias("X_Geo_Vert")
    fL2=BaseFtab.FindField("Y_PNT")
end
fL3=BaseFtab.FindField("X_PNT")
if (fL3=nil) then
    fL3=Field.Make("X_PNT",#FIELD_FLOAT,14,3)
    BaseFtab.AddFields({fL3})
    fL3.SetAlias("Y_Geo_Gorz")
    fL3=BaseFtab.FindField("X_PNT")
end
NT=BaseFtab.GetNumRecords+1
end
for each theTheme in theThemes
tName=theTheme.getName.AsString
theFtab=theTheme.GetFtab
tClassName=theFtab.GetShapeClass.GetClassName
tSel=theFtab.GetSelection
if (tSel.Count=0) then Selector=true
    otv=MsgBox.YesNo("В исходной теме нет выделенных объектов"+NL+
                     "       Обрабатываются все объекты","Копирование объектов",True)
    if (otv.Not) then Selector=False continue else theFtab.GetSelection.SetAll end
   else
    Selector=False
end
tSel=theFtab.GetSelection
ShapeOld=theFtab.FindField("Shape")
if (tClassName="Polygon") then tClass=3
    elseif ((tClassName="Line") or (tClassName="PolyLine")) then tClass=2
    elseif ((tClassName="Point") or (tClassName="MultiPoint")) then tClass=1
    else tClass=0
end
if (((tClass>1) and (bClass>1)) or ((bClass=1) and (tClass=1))) then
    tFields=theFtab.GetFields 'Определение списка полей в таблице
    for each rf in (1..(tFields.count-1))
      if (tFields.Get(rf).IsVisible) then
        bField=BaseFtab.FindField(tFields.Get(rf).AsString)
        if (bField=Nil) then
          fld=tFields.Get(rf).clone
          fld.SetVisible( TRUE )
          BaseFtab.AddFields({fld})
        end
      end
    end
end
'Обработка выделенных объектов в активной теме
if (tClass > 1) then   'исходная тема линейная или полигональная
    BaseFTab.BeginTransaction
    for each record in tSel
      IdentRec=tSel.GetNextSet(record-1)
      lk2=theFtab.returnvalue(ShapeOld,record)
      if (bClass>1) then   'принимающая тема линейная или полигональная
        'for each rec in lk2.AsList
          NewRec=BaseFtab.Addrecord
          'if (bClass=2) then LineNew=PolyLine.Make({rec}) else LineNew=Polygon.Make({rec}) end
          if (bClass=2) then LineNew=PolyLine.Make(lk2.AsList) else LineNew=Polygon.Make(lk2.AsList) end

          BaseFtab.SetValue(ShapeNew,NewRec,LineNew)
          for each rf in (1..(tFields.count-1))
            if (tFields.Get(rf).IsVisible) then
              FieldOld=theFtab.FindField(tFields.Get(rf).AsString)
              Fvalue=theFtab.returnvalue(fieldOld,record)
              FieldNew=BaseFtab.FindField(tFields.Get(rf).AsString)
              BaseFtab.setvalue(FieldNew,Newrec,Fvalue)
            end
          end                     
        'end
       elseif (bClass=1) then 'принимающая тема точечная
        si=BaseFtab.FindFIeld("IDENT")
        fL1=BaseFtab.FindField("ID_PNT")
        fL2=BaseFtab.FindField("Y_PNT")
        fL3=BaseFtab.FindField("X_PNT")
        for each rec in Lk2.AsList
          for each pnt in rec
            Newrec=BaseFtab.Addrecord
            x=pnt.GetX y=pnt.GetY
            BaseFtab.setvalue(si,Newrec,tName++IdentRec.AsString)
            BaseFtab.setvalue(fL1,Newrec,Nt.AsString)
            BaseFtab.setvalue(fL2,Newrec,y)
            BaseFtab.setvalue(fL3,Newrec,x)
 &n
0 голосов
ответил 24 Фев, 11 от Dargin (2,080 баллов)
Не, Мастер пространственных операций - это Geoprocessing

    Во огромное спасибо... все сделал все работает...
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...