польский формат в шейпы, как ?

Основной форум пользователей GPS (Global Positioning System)
Правила форума
Для предотврашения спама первые сообщения вновь зарегистрированных пользователей проходят ручную премодерацию.
Ответить
Anonym
Сообщения: 15897
Зарегистрирован: 06 фев 2017, 18:49

польский формат в шейпы, как ?

Сообщение Anonym » 10 апр 2003, 18:38

сабж, в общем
вроде скрипты для арквьювера обещались....
алтернативы? дге взять комерчевкую gpsmapper?


kbe
Сообщения: 72
Зарегистрирован: 08 фев 2003, 10:30

Re: польский формат в шейпы, как ?

Сообщение kbe » 10 апр 2003, 18:50

Известно, что даже бесплатный cgpsmapper создает временный файл формата .shp в том же каталоге в момент декомпиляции IMG. Не знаю, как насчет процесса сборки, но проследить можно - запустить компиляцию и посмотреть из Проводника, появится ли файл shape. Очевидно, сборка-разборка IMG идет через шейп. Попробуй!


maekel
Сообщения: 90
Зарегистрирован: 17 июн 2001, 20:57

Avenue Скрипт для загрузки польского формата

Сообщение maekel » 10 апр 2003, 21:22

theView = av.GetActiveDoc

'STOP EDITING ALL THEMES
'
if (theView.GetEditableTheme <> nil) then
i = MsgBox.YesNoCancel("Save edits to "+theView.GetEditableTheme.GetName+"?","Stop Editing",true)
if (i = nil) then
return nil
end
if (theView.GetEditableTheme.StopEditing(i).Not) then
MsgBox.Info("Unable to Save Edits to "+theView.GetEditableTheme.GetName+", please use the Save Edits As option", "")
return nil
else
theView.SetEditableTheme(NIL)
end
end

'class = Point
'class = PolyLine
'class = Polygon

'CREATE 3 SHAPE FILES
'
'"c:\tmp\momap\".AsFileName.SetCWD
fnPoints = av.GetProject.MakeFileName("Points", "shp")
fnPoints = FileDialog.Put(fnPoints, "*.shp", "Points Theme")
if (fnPoints = nil) then
MsgBox.Error("Bad Points Theme File Name", "")
exit
end
fnLines = av.GetProject.MakeFileName("Lines", "shp")
fnLines = FileDialog.Put(fnLines, "*.shp", "Lines Theme")
if (fnLines = nil) then
MsgBox.Error("Bad Lines Theme File Name", "")
exit
end
fnPolygons = av.GetProject.MakeFileName("Polygons", "shp")
fnPolygons = FileDialog.Put(fnPolygons, "*.shp", "Polygons Theme")
if (fnPolygons = nil) then
MsgBox.Error("Bad Polygons Theme File Name", "")
exit
end

'CREATE 3 FTABS
'
ftabPoints = FTab.MakeNew(fnPoints, Point)
if (ftabPoints.HasError) then
if (ftabPoints.HasLockError) then
MsgBox.Error("Unable to acquire Write Lock for file " + fnPoints.GetBaseName, "")
else
MsgBox.Error("Unable to create " + fnPoints.GetBaseName, "")
end
exit
end
ftabLines = FTab.MakeNew(fnLines, PolyLine)
if (ftabLines.HasError) then
if (ftabLines.HasLockError) then
MsgBox.Error("Unable to acquire Write Lock for file " + fnLines.GetBaseName, "")
else
MsgBox.Error("Unable to create " + fnLines.GetBaseName, "")
end
exit
end
ftabPolygons = FTab.MakeNew(fnPolygons, Polygon)
if (ftabPolygons.HasError) then
if (ftabPolygons.HasLockError) then
MsgBox.Error("Unable to acquire Write Lock for file " + fnPolygons.GetBaseName, "")
else
MsgBox.Error("Unable to create " + fnPolygons.GetBaseName, "")
end
exit
end

'CREATE FIELDS in 3 FTABS
'
fldId = Field.Make("ID", #FIELD_DECIMAL, 8, 0)
fldRGN = Field.Make("RGN", #FIELD_DECIMAL, 2, 0)
fldType = Field.Make("Type", #FIELD_CHAR, 20, 0)
fldName = Field.Make("Name", #FIELD_CHAR, 40, 0)
'fldId.SetVisible(true)
'fldType.SetVisible(true)
'fldName.SetVisible(true)
lstFields = {fldId, fldRGN, fldType, fldName}
ftabPoints.AddFields(lstFields.DeepClone)
ftabLines.AddFields(lstFields.DeepClone)
ftabPolygons.AddFields(lstFields.DeepClone)
'ftabPoints.SetEditable(False)
thPoints = FTheme.Make(ftabPoints)
thLines = FTheme.Make(ftabLines)
thPolygons = FTheme.Make(ftabPolygons)
theView.AddTheme(thPoints)
theView.AddTheme(thLines)
theView.AddTheme(thPolygons)
thPoints.SetActive(true)
thLines.SetActive(true)
thPolygons.SetActive(true)
thPoints.SetVisible(true)
thLines.SetVisible(true)
thPolygons.SetVisible(true)
'theView.SetEditableTheme(thPoints)


'OPEN INPUT FILE
'
"c:\tmp\arcview\".AsFileName.SetCWD
fnInput = FileDialog.Show("*.txt", "Text file", "Input GPSMapper file")
if (fnInput = nil) then
MsgBox.Error("Bad Input File Name", "")
exit
end
fileInput = LineFile.Make(fnInput, #FILE_PERM_READ)
if (fileInput = nil) then
msgbox.Error("Input GPSMapper file wasn't found"+0x0A.AsChar+"File name:"+fnInput,"ERROR")
exit
end

'READ INPUT FILE
'
while (true)
strElt=fileInput.ReadElt
if (strElt = nil) then
break
end

'BLOCK BEGIN
'
if (strElt.Contains("[RGN")) then
sField = nil
sValue = nil
sShapeType = nil
sShapeName = nil
lstShapePoints = nil
iRGN = strElt.Middle(4,2).AsNumber

'READ FIELDS
'
while (true)
strElt = fileInput.ReadElt

'WARNING IF EOF REACHED BEFORE BLOCK CLOSED BY [END-RGN
'
if (strElt = nil) then
MsgBox.Info ("[END-RGN..] Block closing not found"
+0x0A.AsChar + "fileInput position:" + fileInput.GetPos.AsString, "Unexpected End of File")
break
end

'LEXICAL ANALYSIS
'
i = strElt.Indexof("=")
sField = strElt.Left(i)
sValue = strElt.Right(strElt.Count-i-1)

if (sField = "Type") then
sShapeType = sValue
elseif (sField = "Label") then
'MAKE NAME UPPERCASE STARTED AND CUT COMMENTS IN (...
i = sValue.Indexof("(")
if (i > 0) then
sShapeName = sValue.BasicProper("(").Left(i)
else
sShapeName = sValue.BasicProper("(")
end

'READ COORDINATES
'
elseif (sValue.Contains("(")) then
iID = sField.Middle(i-1,1).AsNumber
'GRAB DATA FROM MAXIMUM ZOOM ONLY
if (iID <> 0) then
break
end
sValue = sValue.Substitute("(","")
sValue = sValue.Substitute(")","")
' sValue = sValue.Trim
lstTmp = sValue.AsTokens(",")

'CONVERT THE LIST OF STRINGS TO LIST OF POINTS
'
lstShapePoints = List.Make
'DEBUG
'MsgBox.Info("lstTmp.Count="+lstTmp.Count.AsString+0x0A.AsChar+"lstTmp.Get(0)="+lstTmp.Get(0).AsString+0x0A.AsChar+"lstTmp.Get(1)="+lstTmp.Get(1).AsString,"DEBUG")
for each i in 0..(lstTmp.Count-1) by 2
lstShapePoints.Add(Point.Make(lstTmp.Get(i+1).AsNumber, lstTmp.Get(i).AsNumber))
end

'BLOCK END
'
elseif (strElt.Contains("[END-RGN")) then

'CHECK IF OBLIGATORY DATA OBTAINED
'
if (lstShapePoints = nil) then
if (Msgbox.YesNo ("Can't obtain coordinates"
+0x0A.AsChar + "fileInput position:" + fileInput.GetPos.AsString
+"Continue ?","Unexpected End of Block", true)) then
break
else
exit
end
end

'DRAW SHAPES
'
if (iRGN = 10) then
break
elseif (iRGN = 20) then
if (sShapeName = nil) then
break
end
if (sShapeType = "0x02") then
sShapeType = "MajorCity"
elseif (sShapeType = "0x03") then
sShapeType = "City"
elseif (sShapeType = "0x04") then
sShapeType = "MinorCity"
elseif (sShapeType = "0x08") then
sShapeType = "Town"
elseif (sShapeType = "0x0a") then
sShapeType = "SmallTown"
end
ftabTmp = ftabPoints
shapeTmp = lstShapePoints.Get(0)

elseif (iRGN = 40) then
if (sShapeType = "0x01") then
sShapeType = "FreeWay"
elseif (sShapeType = "0x02") then
sShapeType = "HighWay"
elseif (sShapeType = "0x03") then
sShapeType = "Road3"
elseif (sShapeType = "0x04") then
sShapeType = "Road4"
elseif (sShapeType = "0x05") then
sShapeType = "Road5"
elseif (sShapeType = "0x06") then
sShapeType = "Road6"
elseif (sShapeType = "0x14") then
sShapeType = "RailRoad"
elseif (sShapeType = "0x18") then
sShapeType = "WaterLine"
elseif (sShapeType = "0x1c") then
sShapeType = "Border"
elseif (sShapeType = "0x1f") then
sShapeType = "River"
end
ftabTmp = ftabLines
shapeTmp = PolyLine.Make({lstShapePoints})
elseif (iRGN = 80) then
if (sShapeType = "0x01") then
sShapeType = "Building"
elseif (sShapeType = "0x3c") then
sShapeType = "Water"
end
ftabTmp = ftabPolygons
shapeTmp = Polygon.Make({lstShapePoints})
else
MsgBox.Info (iRGN.AsString, "Bad RGN")
exit
end
ftabTmp.BeginTransaction
fldShape = ftabTmp.FindField("Shape")
fldID = ftabTmp.FindField("ID")
fldRGN = ftabTmp.FindField("RGN")
fldType = ftabTmp.FindField("Type")
fldName = ftabTmp.FindField("Name")
thePrj = theView.GetProjection
if (thePrj.IsNull.Not) then
shapeTmp = shapeTmp.ReturnUnprojected(thePrj)
end
rec = ftabTmp.AddRecord
ftabTmp.SetValue(fldShape, rec, shapeTmp)
ftabTmp.SetValue(fldID, rec, iID)
ftabTmp.SetValue(fldRGN, rec, iRGN)
ftabTmp.SetValue(fldType, rec, sShapeType)
ftabTmp.SetValue(fldName, rec, sShapeName)
' ftabTmp.GetSelection.ClearAll
' ftabTmp.GetSelection.Set(rec)
' ftabTmp.UpdateSelection
ftabTmp.EndTransaction
break
end
end
end
end
fileInput.close
av.GetProject.SetModified(true)



maekel



Anonym
Сообщения: 15897
Зарегистрирован: 06 фев 2017, 18:49

Re: Avenue Скрипт для загрузки польского формата

Сообщение Anonym » 11 апр 2003, 17:15

спасибо
жаль конечно что он на лейры не смотрит (дата0,дата1...)


maekel
Сообщения: 90
Зарегистрирован: 17 июн 2001, 20:57

Скрипт старый - доработать напильником.

Сообщение maekel » 11 апр 2003, 18:04

ч

maekel

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 152 гостя