Пропоную скрипт для "тихого" перетворення координат. Використовується формат
PROJ4 https://trac.osgeo.org/proj/wiki/GenParms (один з найпоширенiших форматiв для опису систем координат).
Застосовується функцiя
@DLLExec19.12.2016 Крiм
Transfer Добавлено функцiї
Grad2Str (45.123456789 = 45°07'24)
Str2Grad (45°07'24 = 45.123456789)
Працює з датумами з файлу Datums.ini (напр. GeoGed.Transfer 'SK63(1)' 'WGS84' '$PntList'). Тестувалось на SK63, SK42 та WGS84.27.12.2016 У зв'язку з рiзними значеннями параметрiв 7-ми параметричного перетворення змiнено читання з файлу Datums.ini (завантажуйте оновлений файл GeoGed.dll)Добавлена ф-цiя
GetPublicMapInfo (подiбна стандартнiй)
...потрiбна була iнформацiя про грунти (приклад додаю в наступному повiдомленнi).
17.01.2017 1. Добавлено функцiю
GetUrlContents для отримання даних з URL сторiнки
2. Ф-цiя
Transfer працює зi складними контурами (значення -2684354.56 не трансформуються)
Код:
$Count=@MapCount
@if $Count=0 @Break
$Sel=@Map.SelCount
@if $Sel=0 then @break Виберiть елементи
;Parameters SC 63(1)
$source=+proj=tmerc +lat_0=0 +lon_0=23.5 +k=1 +x_0=1300000 +y_0=-9214.688 +ellps=krass +towgs84=25.0,-141.0,-78.5,0,-0.35,-0.736,0.0 +no_defs
;Parameters WGS64
;$target=+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
;Parameters SK42(6)
$target=+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=25.0,-141.0,-78.5,0,-0.35,-0.736,0.0 +no_defs
$Obj=0
%Cycle
$Obj=@Map.NextSelected $Obj
$PntCnt=@Map.Object[$Obj].Count
$PntList=
%MakeList
$Pnt=@Map.Object[$Obj].Point[$PntCnt]
$PntList=$Pnt $PntList
$PntCnt=$PntCnt-1
@if $PntCnt>0 then @goto %MakeList
;
$Str=@DLLExec GeoGed\GeoGed.Transfer '$source' '$target' '$PntList'
$Res=@StringPart 1,$str
@if $Res>0 then @goto %Process
; обробка помилки
;
@Dialog.Message $Res
@Goto %End
%Process
$PntCnt=$Res
$PntList=@Calc Replace(Delete("$Str",1,Pos(",","$Str")),",",";")
%DrawEem
$Pnt=@StringPart $PntCnt;$PntList
$Pnt=@DequoteText $Pnt
; перевiрка, чи не розрив (складний полiгон)
$CPnt=@Map.Object[$Obj].Point[$PntCnt]
$CPntX=@StringPart 1 $CPnt
@If $CPntX=-2684354.56 then @goto %SkipPnt
@Map.Object[$Obj].Point[$PntCnt] $Pnt
%SkipPnt
$PntCnt=$PntCnt-1
@if $PntCnt>0 then @goto %DrawEem
$Sel=$Sel-1
@if $Sel>0 then @goto %Cycle
%End
16.10.2017 Добавлено ряд нових функцiй в бiблiотеку GeoGed (Get_Release, CodePageConvert, UrlEncode, Preg_Match, DialogCheckListBox). Функцiя Get_Release виводить iнформацiю по використанню цих функцiй.
25.07.2018 Добавлено функцiї PointInPoly (положення точки вiдносно контуру) та GetPolyType (визначення типу полiгону).
Код:
$Obj=@Map.SelectedObject
$Poly=@Map.GetObjectCoordinates $Obj
$Res=@DLLExec GeoGed\GeoGed.GetPolyType 0.001 $Poly
Код:
@Dialog.WaitBox Виберiть полiгон
$Obj=@Map.SelectedObject
@Map.DeselectAll
@Dialog.WaitBox Виберiть точку для визначення її положення вiдносно полiгону
$Pnt=@Map.SelectedObject
$Pnt=@Map.Object[$Pnt].Point[1]
$Poly=@Map.GetObjectCoordinates $Obj
$Param=$Pnt 0,001 $Poly
$Res=@DLLExec GeoGed\GeoGed.PointInPoly $Param