Поменять X на Y

0 голосов
спросил 19 Апр, 04 от Vius (7,580 баллов) в категории Программные продукты Esri

Один хороший человек оцифровал карту, неправильно привязав растр..Бывает, перепутал координаты - вместо икса поставил игрек и наоборот. Так что задача следущая - есть до фига слоев, надо поменять координаты местами. Как это сделать можно??

3 Ответы

0 голосов
ответил 20 Апр, 04 от Гость (210,080 баллов)

Не очень четко обрисованна ситуация.
Как я понял, карта получилась развернута на 90 градусов и с началом координат (Y,X) вместо (X,Y) ?
Если это так, и карта оцифрована в проекции (не в градусах), то над ней необходимо произвести два преобразования:
1. Поворот на -90 градусов
2. Перенос начала координат из (Y,X) в (X,Y) (Если X=Y=0, то перенос не нужен)

Эти действия можно произвести в Arcview 3.3
Если такое решение подходит могу выслать скрипт.

0 голосов
ответил 20 Апр, 04 от Vius (7,580 баллов)

похоже, что проблема понята правильно...для уточнения - взяли растр,  стали его привязывать, в столбец с Х координатами вписали Y, в столбец с Y - иксы.image потом оцифровали. спасибо за помощь, но у меня нет 3.3. есть только 3.2.

0 голосов
ответил 20 Апр, 04 от Гость (210,080 баллов)

Arcview 3.2 подойдет.
Сбрасываю скрипт:

'Поворот и перенос начала координат у первой активной темы

theView  = av.GetActiveDoc
theTheme = theView.GetActiveThemes.Get(0)

defaultName  = FN.Make("$HOME").MakeTmp("theme","shp")
shpFileName  = FileDialog.Put( defaultName,"*.shp","Output Shape File" )

if (shpFileName = Nil) then  exit end
 
shpFileName.SetExtension("shp")
shapeType = theTheme.GetFtab.FindField("Shape").GetType

if (shapeType = #FIELD_SHAPELINE) then
  outFTab = FTab.MakeNew( shpFileName, Polyline )
elseif (shapeType = #FIELD_SHAPEMULTIPOINT) then
  outFTab = FTab.MakeNew( shpFileName, Multipoint )
elseif (shapeType = #FIELD_SHAPEPOINT) then
  outFTab = FTab.MakeNew( shpFileName, Point )
elseif (shapeType = #FIELD_SHAPEPOLY) then
  outFTab = FTab.MakeNew( shpFileName, Polygon )
end

inShapeField = theTheme.GetFtab.FindField("Shape")
outShapeField = outFTab.FindField("Shape")

inFTab = theTheme.GetFTab
inFieldList  = inFTab.GetFields
outFieldList = inFieldList.DeepClone

outFieldList.Remove(0) 
outFTab.AddFields( outFieldList )

aTrans = Transform2D.Make
aTrans.rotate(-90)  'Поворот на -90 градусов
'aTrans.Move(cX@cY) 'Перенос начала координат

for each rec in inFTab
  theShape = theTheme.GetFtab.ReturnValue( inShapeField, rec )
  newShape = theShape.Transform(aTrans)
  newRec   = outFtab.AddRecord
  outFTab.SetValue( outShapeField, newRec, newShape )
  fieldPtr = 0
  for each fOut in outFieldList
    fieldPtr = fieldPtr + 1
    fIn  = inFieldList.Get( fieldPtr )
    outFTab.SetValue( fOut, newRec, inFTab.ReturnValue( fIn, rec ) )
  end
end
outFtab.Flush

Если слоев очень много, то скрипт можно модифицировать так, чтобы он трансформировал все темы в виде.

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