Аналитика
http://geosystema.net/forum/

Библиотека полезных скриптов
http://geosystema.net/forum/viewtopic.php?f=4&t=2539
Страница 9 из 15

Автор:  Руслан Пархуць [ 18 дек 2016 02:25 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Пропоную скрипт для "тихого" перетворення координат. Використовується формат PROJ4 https://trac.osgeo.org/proj/wiki/GenParms (один з найпоширенiших форматiв для опису систем координат).
Застосовується функцiя @DLLExec

19.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


Вложения:
Комментарий к файлу: GeoGED 2.3 Lite
20.02.20 у зв'язку iз введенням в дiю нової версiї сайту map.land.gov.ua внесено змiни в функцiю GetPublicMapInfo

GeoGed_2.3.zip [586.36 Кб]
Скачиваний: 358
Transfer.tlb [3.98 Кб]
Скачиваний: 830

Автор:  Руслан Пархуць [ 27 дек 2016 16:25 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Скрипт для отримання даних про грунти (в даному випадку), або iншої iнформацiї з публiчної карти (необхiдно бiблiотеку GeoGed з попереднього повiдомлення).
Код:
$Count=@MapCount
@if $Count=0 @Break
$Sel=@Map.SelCount
@if $Sel=0 then @break Виберiть елементи
$Obj=0
$Obj=@Map.NextSelected $Obj
$Pnt=@Map.Object[$Obj].Center
$Res=@DLLExec GeoGed\GeoGed.Transfer 'SK63(1)' 'WGS84' '$Pnt'
$Cnt=@StringPart 1,$Res
@if $Cnt>0 then @goto %NextStep
;
@Goto %End
%NextStep
$Pnt=@StringPart 2,$Res
$target=+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +no_defs
$Res=@DLLExec GeoGed\GeoGed.Transfer 'WGS84' '$target' '$Pnt'
$Cnt=@StringPart 1,$Res
@if $Cnt>0 then @goto %Process
;
@Goto %End
%Process
$Pnt=@StringPart 2,$Res
$Res=@DLLExec GeoGed\GeoGed.GetPublicMapInfo $Pnt
; $Res данi в Text
@Text.Text $Res
; якщо є данi про грунти (секцiя soil)
$Pos=@Text.IndexOf soil
@if $Pos=0 @goto %End
; витираємо зайвi елементи списку (формуємо новий $Res) 
@Text.Delete 1-$Pos
; шукаємо секцiю Шифр:
$Pos=@Text.IndexOf name_g_id
@if $Pos=0 @goto %End
; данi секцiї в рядку +1
$Pos=$Pos+1
$SoilsV=@Text.Line[$Pos]
; те саме, але для секцiї Назва:
$Pos=@Text.IndexOf name_g_txt
@if $Pos=0 @goto %End
$Pos=$Pos+1
$SoilsN=@Text.Line[$Pos]
; записуємо знайдену iнф. в параметри 1 та 2 об'єкту
;@Map.Object[$Obj].Parameter[1] $SoilsV
;@Map.Object[$Obj].Parameter[2] $SoilsN*
@Dialog.Message $SoilsV - $SoilsN
@Goto %End
%Skip
@Dialog.Message Не знайдено iнформацiї
%End


Приклад використання функцiй GetUrlContents для отримання даних про грунтовий покрив iз сайту НГО та zakon.rada.gov.ua
Код:
;--------------------------------------------------------------
; (вихiдна система координат СК-63(1 зона)
;--------------------------------------------------------------
$Count=@MapCount
@if $Count=0 @Break
$Sel=@Map.SelCount
@if $Sel=0 then @break Виберiть елементи
$Obj=@Map.NextSelected
$Pnt=@Map.Object[$Obj].Center
$Res=@DLLExec GeoGed\GeoGed.Transfer 'SK63(1)' 'WGS84' '$Pnt'
$Cnt=@StringPart 1,$Res
@if $Cnt>0 then @goto %NextStep
@Goto %End
;
%NextStep
$Pnt=@StringPart 2,$Res
$target=+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +no_defs
$Res=@DLLExec GeoGed\GeoGed.Transfer 'WGS84' '$target' '$Pnt'
$Cnt=@StringPart 1,$Res
@if $Cnt>0 then @goto %Process
@Goto %End
;
%Process
$Pnt=@StringPart 2,$Res
$X=@StringPart 1 $Pnt
$Y=@StringPart 2 $Pnt
; данi iз сайту НГО
$URL=https://ngo.land.gov.ua/uk/map/getGeoObjects
$Req=coords%5B%5D=$Y&coords%5B%5D=$X&layers%5B%5D=agrogroups&zoom=16
$Res=@DLLExec GeoGed\GeoGed.GetUrlContents $URL $Req
$Res=@DLLExec GeoGed\GeoGed.UrlDecode $Res
$Code=@DLLExec GeoGed\GeoGed.Preg_Match /class='right_menu_content-description'>([^<]*)/ $Res
; данi iз сайту zakon.rada.gov.ua (Порядок ведення Державного земельного кадастру)
$URL=https://zakon.rada.gov.ua/laws/show/1051%D0%B1-2012-%D0%BF/print
$Res=@DLLExec GeoGed\GeoGed.GetUrlContents $URL zakon.rada.gov.ua
$Res=@DLLExec GeoGed\GeoGed.CodePageConvert 65001 1251 $Res
$Name=@DLLExec GeoGed\GeoGed.Preg_Match /<p class=rvps12>$Code<\/p>.*?<p class=rvps14>([^<]*)/ $Res
;
@Dialog.Message Сайт НГО|Шифр: $Code|Назва: $Name
;

Автор:  Руслан Пархуць [ 27 дек 2016 22:02 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

voha писал(а):
Всім доброго дня.
Є в мене така задача - розділити збірний полігональний об'єкт на не збірні.
http://www.geosystema.net/forum/viewtopic.php?f=1&t=2809&p=38460#38458

Код:
$Count=@MapCount
@if $Count=0 @Break
$Sel=@Map.SelCount
@if $Sel=0 then @break Виберiть елементи
$Obj=0
; поточний ID
$Obj=@Map.NextSelected $Obj
; к-сть елементiв карти
$FCnt=@Map.Count
@ExecuteMenu spbSplit
; к-сть елементiв пiсля розподiлу
$RCnt=@Map.Count
;
@Map.SelectObject $Obj
@ExecuteMenu spbCombine
@Map.DeselectAll
@if $FCnt=$RCnt @Goto %End
$FCnt=$FCnt+1
%Cycle
$Obj=@Map.SelectObject $FCnt
@ExecuteMenu spbCombine
@Map.DeselectAll
$FCnt=$FCnt+1
@if $FCnt>$RCnt @Goto %End
@Goto %Cycle
%End


Вложения:
02.jpg
02.jpg [ 19.78 Кб | Просмотров: 52823 ]

Автор:  Руслан Пархуць [ 17 янв 2017 15:36 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

vitjazzz писал(а):
Доброго дня Чи є на сьогоднішній день можливість провести транслітерацію строкового параметру, наприклад Іванов Іван Іванович, з кирилиці на латинь- Ivanov Ivan Ivanovic. Дякую!

GetUrlContents ф-цiя для отримання даних з URL сторiнки

Код:
$Name=Іванов Іван Іванович
$URL=http://translate.meta.ua/ajax/?sn=get_translit&direction=0&text_source=$Name
$Res=@DLLExec GeoGed\GeoGed.GetUrlContents $URL
@Dialog.Message $Name|$Res


Вложения:
Translit.tlb [2.78 Кб]
Скачиваний: 761
01.jpg
01.jpg [ 8.79 Кб | Просмотров: 52188 ]

Автор:  fendak [ 17 янв 2017 21:47 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

от тільки даний сервіс робить транслітерацію за правилами не українського, а російського правопису.
беріть якийсь інший, наприклад, http://www.slovnyk.ua/services/translit.php

Ivanovich --> Ivanovych

Автор:  Руслан Пархуць [ 17 янв 2017 22:49 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Руслан Пархуць писал(а):
от тільки даний сервіс робить транслітерацію за правилами не українського, а російського правопису

Ф-цiя писалась для отримання iнформацiї iз сторiнки GET запитом в загальному (а лiтерацiя - для прикладу роботи з нею).
P.S. ... сервiс то український - meta.ua :D

Бiблiотека для транслiтерацiї українського алфавіту згiдно Постанови Кабінету Міністрів України від 27 січня 2010 р. №55. Для використання помiстiть файл Translit.dsf в папку Library.
Код:
$Name=Гаращенко Юрій Костянтинович
$Res=%Library.Translit $Name
@Dialog.Message $Res
$Res=Harashchenko Yurii Kostiantynovych

Вложения:
Translit.zip [1.14 Кб]
Скачиваний: 452

Автор:  Kaktus [ 13 мар 2017 12:48 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Потрібен скрипт щоб заповнювати КОАТУУ, зону та квартал в XML з ПКК. Таке можливо?

Автор:  Dmitry_Zolotar [ 13 мар 2017 16:35 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Kaktus писал(а):
Потрібен скрипт щоб заповнювати КОАТУУ, зону та квартал в XML з ПКК. Таке можливо?

@Map.DeselectAll
@Map.SelectLayer ID70005
$SC=@Map.SelCount
@if $SC<>1 then @Break Одна XML-ділянка має бути в карті
$SO=@Map.SelectedObject
$XYZ=@Map.Object[$SO].Centroid
$S=@Map.GetPublicMapQuarterInfo $XYZ
@Text[1].Text $S
$LC=@Text[1].Count
@if $LC<3 then @Break Інформація не знайдена
@if $LC<>3 then @Break Інформація може дублюватись
%LoopLine
$KOATUU=@Text[1].Line[1]
$KOATUU=@StringPart 2=$KOATUU
$ZoneNumber=@Text[1].Line[2]
$ZoneNumber=@StringPart 2=$ZoneNumber
$QuarterNumber=@Text[1].Line[3]
$QuarterNumber=@StringPart 2=$QuarterNumber
@Map.DeselectAll
@Map.SelectLayer ID70003
$SC=@Map.SelCount
@if $SC<>1 then @Break Об'єкт XML-кадастрова зона має бути в карті
$SO=@Map.SelectedObject
@Map.Object[$SO].Parameter[ID7000301] $KOATUU:$ZoneNumber
@Map.DeselectAll
@Map.SelectLayer ID70004
$SC=@Map.SelCount
@if $SC<>1 then @Break Об'єкт XML-кадастровий квартал має бути в карті
$SO=@Map.SelectedObject
@Map.Object[$SO].Parameter[ID7000401] $QuarterNumber
@Map.DeselectAll
@Dialog.Message $S

Автор:  Kaktus [ 14 мар 2017 08:52 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Дякую, Dmitry_Zolotar

Автор:  DevilliveD [ 08 апр 2017 23:00 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Доброго дня!
Хочу формувати не стандартні xml-файли з не шаблонних шарів. @Map.In4ToXML вимагає in4:Ділянка і т.д.
Підскажіть будь-ласка як витягнути з карти <PointInfo> та <Polyline> ?
Все інше якось по тегам сформую без проблем.
Дякую!

Автор:  Dmitry_Zolotar [ 10 апр 2017 09:03 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Дослідіть файл Digitals\Templates\XMLNormal.dmf. В ньому є "кореневий" шар ID70000 "XML-реквізити обм. файла". Єдиний об'єкт цього шару - корінь XML-файлу. В Параметрах XML цього шару вказано лише XMLGeometryTag=Externals, а доступні цьому шару параметри визначають ієрархію тегів цього об'єкта.
Не розберетесь що до чого там, зкиньте схему Вашого файла, або хоча б приклад xml-файлу - спробую налаштувати XMLNormal.dmf при умові, що геометрія зберігається так само.

Вложения:
FileDate.png
FileDate.png [ 43.46 Кб | Просмотров: 51439 ]

Автор:  DevilliveD [ 10 апр 2017 10:44 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Дуже велике дякую!
Зі структурою розібрався вроді.
Але залишається питання: як передаються параметри з, наприклад, in4_ділянка?
Якщо у мене шари, наприклад, 1,2,3,4.
@Map.In4ToXML
Чи потрібно створювати карту тільки на основі шаблону XmlNormal?

Автор:  Dmitry_Zolotar [ 10 апр 2017 10:56 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Має бути в карті шар ID70000 XML_реквізит обм.файлу, щоб карта зберігалась в XML. Цей шар краше зкопіювати з усіма параметрами, але змінити XML-параметри для використання шарів з Ін4.

Автор:  Sergey45 [ 21 май 2017 20:05 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Вложение:
.jpg
.jpg [ 12.96 Кб | Просмотров: 50859 ]
Доброго дня. Підкажіть, в "Скрипт для перерахунку растрів в іншу систему координат" потрібно якось доробити ? Бо видає помилку

Автор:  Dmitry_Zolotar [ 21 май 2017 20:13 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Sergey45 писал(а):
Вложение:
.jpg
Доброго дня. Підкажіть, в "Скрипт для перерахунку растрів в іншу систему координат" потрібно якось доробити ? Бо видає помилку

Потрібно один раз перерахувати(меню Реєстри-Перерахувати з УСК-2000 в МСК-05) якусь карту в MSK-05, щоб такий датум з'явився в Datums.ini

Страница 9 из 15 Часовой пояс: UTC + 2 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/