Аналитика 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
|
Автор: | Руслан Пархуць [ 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
|
Автор: | Руслан Пархуць [ 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
|
Автор: | 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 Бiблiотека для транслiтерацiї українського алфавіту згiдно Постанови Кабінету Міністрів України від 27 січня 2010 р. №55. Для використання помiстiть файл Translit.dsf в папку Library. Код: $Name=Гаращенко Юрій Костянтинович $Res=Harashchenko Yurii Kostiantynovych
$Res=%Library.Translit $Name @Dialog.Message $Res
|
Автор: | 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 при умові, що геометрія зберігається так само.
|
Автор: | 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 [ 12.96 Кб | Просмотров: 59997 ] |
Автор: | 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/ |