Импорт готовой сетки в Surfer

Все про Surfer
Ответить
lvlex
Новоприбывший
Сообщения: 7
Зарегистрирован: 10 май 2016, 16:43
Репутация: 0

Импорт готовой сетки в Surfer

Сообщение lvlex » 12 май 2016, 12:58

Есть достаточно любопытная задача.

Имеется готовая регулярная сетка с некоторым параметром. Сетка создается в сторонней программе (если интересно, при помощи AlgLib).

Необходимо эту готовую сетку импортировать в Surfer, без применения методов интерполяции или других методов изменяющих имеющиеся данные. Вообще, это нужно для визуализации, Surfer был выбран как софт имеющий встроенный скриптовый язык, и строящий довольно красивые картинки. То есть от Surfer требуется только визуализация готовых данных. Порывшись в нем я смог импортировать сетку из Surfer в текстовый GRD формат.

Данный формат имеет расширение grd и выглядит следующим образом:
DSAA
100 45
34.8803 43.8803
64.5318 68.5318
4.8564095009633 7.9531555409769
7.883 7.838 7.794 7.752 7.713 7.678 7.645 .....
На радостях, я подумал что Surfer сможет так же и экспортировать этот формат без доп. обработки. Но не тут то было. Создав такой файл, выяснилось, что Surfer работает с ним так же как и с любым txt. И предлагает создать грид заново проинтерполировав данные, что делать категорически нельзя.

Как мне известно в Surfer достаточно много функций для создания и импорта сеток, от интерполяции, учащения/разряжения сеток, заполнения по формуле. Но, неужели нельзя просто импортировать готовую сетку? Такой функции я пока что не обнаружил.

Формат исходных данных предпочтительно ASCII, причем я могу достаточно быстро сделать любой ASCII какой душе угодно.

Игорь Белов
Гуру
Сообщения: 1577
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 973
Откуда: Казань

Re: Импорт готовой сетки в Surfer

Сообщение Игорь Белов » 12 май 2016, 13:44

Букв много, но ничего непонятно. Дайте угадаю. Имеются данные в текстовых файлах с колонками X, Y, Z, где X, Y попадают в узлы сетки, и надо получить грид, в узлах которого окажутся Z без интерполяции. Если так, выбирайте метод интерполирования "Nearest Neighbor", вводите соответствующие Xmin, Xmax, Ymin, Ymax и число колонок/строк или же шаг по каждой координате. В опциях метода выберите радиус поиска заведомо меньше расстояния между узлами, чтобы не тормозить процесс.

lvlex
Новоприбывший
Сообщения: 7
Зарегистрирован: 10 май 2016, 16:43
Репутация: 0

Re: Импорт готовой сетки в Surfer

Сообщение lvlex » 12 май 2016, 15:06

Имеются данные в текстовых файлах с колонками X, Y, Z, где X, Y попадают в узлы сетки
Да, это я и имел ввиду. Спасибо за перевод. Но это не обязательно так. Формат данных я могу сделать такой какой будет нужно. Изначально я вообще хотел сделать сразу готовый *.grd. Но формат grd в Surfer оказался бинарный и до кучи проприетарный, поэтому этот вариант я отбросил.

По поводу ближайшего соседа, да, делал так в MapInfo. Но это же откровенный костыль на мой взгляд, а если учесть, что в дальнейшем необходимо будет написать скрипт, который будет повторять это несколько сотен раз, то ещё и медленный костыль. Этот вариант я оставлю на крайний случай.

В MapInfo есть формат MIF, но гриды правда у меня он вообще не импортирует. Хотелось бы найти какой нибудь аналог обменного формата для Surfer чтобы он был в ASCII, если это возможно.

У меня в личку просили пример данных, я для удобства существенно уменьшил размер сетки (9х10), выложу здесь.
Такой у меня был изначально:Show
3.19424e+06 1.26014e+06 20.6929
3.19424e+06 1.32014e+06 20.1793
3.19424e+06 1.38014e+06 19.6657
3.19424e+06 1.44014e+06 19.152
3.19424e+06 1.50014e+06 18.6384
3.19424e+06 1.56014e+06 18.1247
3.19424e+06 1.62014e+06 17.6111
3.19424e+06 1.68014e+06 17.0975
3.19424e+06 1.74014e+06 16.5838
3.25424e+06 1.26014e+06 22.8514
3.25424e+06 1.32014e+06 22.3378
3.25424e+06 1.38014e+06 21.8242
3.25424e+06 1.44014e+06 21.3105
3.25424e+06 1.50014e+06 20.7969
3.25424e+06 1.56014e+06 20.2832
3.25424e+06 1.62014e+06 19.7696
3.25424e+06 1.68014e+06 19.256
3.25424e+06 1.74014e+06 18.7423
3.31424e+06 1.26014e+06 25.0099
3.31424e+06 1.32014e+06 24.4963
3.31424e+06 1.38014e+06 23.9827
3.31424e+06 1.44014e+06 23.469
3.31424e+06 1.50014e+06 22.9554
3.31424e+06 1.56014e+06 22.4417
3.31424e+06 1.62014e+06 21.9281
3.31424e+06 1.68014e+06 21.4145
3.31424e+06 1.74014e+06 20.9008
3.37424e+06 1.26014e+06 27.1684
3.37424e+06 1.32014e+06 26.6548
3.37424e+06 1.38014e+06 26.1411
3.37424e+06 1.44014e+06 25.6275
3.37424e+06 1.50014e+06 25.1139
3.37424e+06 1.56014e+06 24.6002
3.37424e+06 1.62014e+06 24.0866
3.37424e+06 1.68014e+06 23.5729
3.37424e+06 1.74014e+06 23.0593
3.43424e+06 1.26014e+06 29.3269
3.43424e+06 1.32014e+06 28.8133
3.43424e+06 1.38014e+06 28.2996
3.43424e+06 1.44014e+06 27.786
3.43424e+06 1.50014e+06 27.2724
3.43424e+06 1.56014e+06 26.7587
3.43424e+06 1.62014e+06 26.2451
3.43424e+06 1.68014e+06 25.7314
3.43424e+06 1.74014e+06 25.2178
3.49424e+06 1.26014e+06 31.4854
3.49424e+06 1.32014e+06 30.9718
3.49424e+06 1.38014e+06 30.4581
3.49424e+06 1.44014e+06 29.9445
3.49424e+06 1.50014e+06 29.4309
3.49424e+06 1.56014e+06 28.9172
3.49424e+06 1.62014e+06 28.4036
3.49424e+06 1.68014e+06 27.8899
3.49424e+06 1.74014e+06 27.3763
3.55424e+06 1.26014e+06 33.6439
3.55424e+06 1.32014e+06 33.1303
3.55424e+06 1.38014e+06 32.6166
3.55424e+06 1.44014e+06 32.103
3.55424e+06 1.50014e+06 31.5893
3.55424e+06 1.56014e+06 31.0757
3.55424e+06 1.62014e+06 30.5621
3.55424e+06 1.68014e+06 30.0484
3.55424e+06 1.74014e+06 29.5348
3.61424e+06 1.26014e+06 35.8024
3.61424e+06 1.32014e+06 35.2888
3.61424e+06 1.38014e+06 34.7751
3.61424e+06 1.44014e+06 34.2615
3.61424e+06 1.50014e+06 33.7478
3.61424e+06 1.56014e+06 33.2342
3.61424e+06 1.62014e+06 32.7206
3.61424e+06 1.68014e+06 32.2069
3.61424e+06 1.74014e+06 31.6933
3.67424e+06 1.26014e+06 37.9609
3.67424e+06 1.32014e+06 37.4473
3.67424e+06 1.38014e+06 36.9336
3.67424e+06 1.44014e+06 36.42
3.67424e+06 1.50014e+06 35.9063
3.67424e+06 1.56014e+06 35.3927
3.67424e+06 1.62014e+06 34.8791
3.67424e+06 1.68014e+06 34.3654
3.67424e+06 1.74014e+06 33.8518
3.73424e+06 1.26014e+06 40.1194
3.73424e+06 1.32014e+06 39.6057
3.73424e+06 1.38014e+06 39.0921
3.73424e+06 1.44014e+06 38.5785
3.73424e+06 1.50014e+06 38.0648
3.73424e+06 1.56014e+06 37.5512
3.73424e+06 1.62014e+06 37.0375
3.73424e+06 1.68014e+06 36.5239
3.73424e+06 1.74014e+06 36.0103
А вот это неудавшаяся попытка сделать текстовый*.grd для Surfer:Show
DSSA
9 10
1.26014e+06 1.68021e+06
3.19424e+06 3.69485e+06
16.5838 40.1194
20.6929 20.1793 19.6657 19.152 18.6384 18.1247 17.6111 17.0975 16.5838

22.8514 22.3378 21.8242 21.3105 20.7969 20.2832 19.7696 19.256 18.7423

25.0099 24.4963 23.9827 23.469 22.9554 22.4417 21.9281 21.4145 20.9008

27.1684 26.6548 26.1411 25.6275 25.1139 24.6002 24.0866 23.5729 23.0593

29.3269 28.8133 28.2996 27.786 27.2724 26.7587 26.2451 25.7314 25.2178

31.4854 30.9718 30.4581 29.9445 29.4309 28.9172 28.4036 27.8899 27.3763

33.6439 33.1303 32.6166 32.103 31.5893 31.0757 30.5621 30.0484 29.5348

35.8024 35.2888 34.7751 34.2615 33.7478 33.2342 32.7206 32.2069 31.6933

37.9609 37.4473 36.9336 36.42 35.9063 35.3927 34.8791 34.3654 33.8518

40.1194 39.6057 39.0921 38.5785 38.0648 37.5512 37.0375 36.5239 36.0103

trir
Гуру
Сообщения: 3547
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 582
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Импорт готовой сетки в Surfer

Сообщение trir » 12 май 2016, 15:09

Surfer дико не удобный для визуализации...

lvlex
Новоприбывший
Сообщения: 7
Зарегистрирован: 10 май 2016, 16:43
Репутация: 0

Re: Импорт готовой сетки в Surfer

Сообщение lvlex » 12 май 2016, 15:15

Изначально, рассматривал три варианта MapInfo, Surfer и Grass GIS, Мапинфо делает то что надо только с Vertical Mapper, и как это автоматизировать я не представляю вообще. А с грассом я раньше не работал, поэтому сперва стал пробовать Surfer. Ах да, ещё хотел было сразу GDAL подцепить, но это слишком много работы.

Может, что ещё посоветуете? Из визуализации необходимы изолинии и раскраска, это как минимум, плюс какой нибудь скриптовый язык как в серфере.

trir
Гуру
Сообщения: 3547
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 582
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Импорт готовой сетки в Surfer

Сообщение trir » 12 май 2016, 15:22

я делал в Civil 3D

Александр Мурый
Гуру
Сообщения: 5073
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 727
Ваше звание: званий не имею
Откуда: Москва

Re: Импорт готовой сетки в Surfer

Сообщение Александр Мурый » 12 май 2016, 15:52

Рекомендую попробовать всё сделать в QGIS. В "Анализе данных" есть все нужные модули для анализа, раскраска растров несложная, для визуализации можно использовать грассовый NVIZ или, как вариант, модуль Qgis2threejs. Утилиты GDAL там тоже подключены.
Кстати, ещё неплохая визуализация у SAGA (ставится вместе с QGIS).

Будут вопросы (а они будут) - пишите на форуме в разделе QGIS.
Редактор материалов, модератор форума

lam
Гуру
Сообщения: 690
Зарегистрирован: 01 авг 2012, 13:55
Репутация: 170

Re: Импорт готовой сетки в Surfer

Сообщение lam » 13 май 2016, 10:01

текстовый*.grd для Surfer:Show
DSSA
10 9
3194240.0 3734240.0
1260140.0 1740140.0
16.5838 40.1194
20.6929 22.8514 25.0099 27.1684 29.3269 31.4854 33.6439 35.8024 37.9609 40.1194

20.1793 22.3378 24.4963 26.6548 28.8133 30.9718 33.1303 35.2888 37.4473 39.6057

19.6657 21.8242 23.9827 26.1411 28.2996 30.4581 32.6166 34.7751 36.9336 39.0921

19.152 21.3105 23.469 25.6275 27.786 29.9445 32.103 34.2615 36.42 38.5785

18.6384 20.7969 22.9554 25.1139 27.2724 29.4309 31.5893 33.7478 35.9063 38.0648

18.1247 20.2832 22.4417 24.6002 26.7587 28.9172 31.0757 33.2342 35.3927 37.5512

17.6111 19.7696 21.9281 24.0866 26.2451 28.4036 30.5621 32.7206 34.8791 37.0375

17.0975 19.256 21.4145 23.5729 25.7314 27.8899 30.0484 32.2069 34.3654 36.5239

16.5838 18.7423 20.9008 23.0593 25.2178 27.3763 29.5348 31.6933 33.8518 36.0103

lvlex
Новоприбывший
Сообщения: 7
Зарегистрирован: 10 май 2016, 16:43
Репутация: 0

Re: Импорт готовой сетки в Surfer

Сообщение lvlex » 13 май 2016, 12:29

Iam, спасибо вам за внимательность. С экспоненциальной формой записи чисел Surfer работает как надо. А размеры сетки да, было не верно. Увидев это перепроверил ещё раз все полностью и нашел ещё один свой собственный косяк. Даже сказать стыдно какой. :oops:
В итоге заработало. Распишу немного подробнее, может кому понадобиться.
Рабочий вариант вот (расширение grd):Show
DSAA
10 9
1.26014e+06 1.68021e+06
3.19424e+06 3.69485e+06
16.5838 40.1194
20.6929 22.8514 25.0099 27.1684 29.3269 31.4854 33.6439 35.8024 37.9609 40.1194

20.1793 22.3378 24.4963 26.6548 28.8133 30.9718 33.1303 35.2888 37.4473 39.6057

19.6657 21.8242 23.9827 26.1411 28.2996 30.4581 32.6166 34.7751 36.9336 39.0921

19.152 21.3105 23.469 25.6275 27.786 29.9445 32.103 34.2615 36.42 38.5785

18.6384 20.7969 22.9554 25.1139 27.2724 29.4309 31.5893 33.7478 35.9063 38.0648

18.1247 20.2832 22.4417 24.6002 26.7587 28.9172 31.0757 33.2342 35.3927 37.5512

17.6111 19.7696 21.9281 24.0866 26.2451 28.4036 30.5621 32.7206 34.8791 37.0375

17.0975 19.256 21.4145 23.5729 25.7314 27.8899 30.0484 32.2069 34.3654 36.5239

16.5838 18.7423 20.9008 23.0593 25.2178 27.3763 29.5348 31.6933 33.8518 36.0103


Данный формат называется GRD Sufref 6 Text Grid(*.grd)
Посмотреть его пример можно открыв любой грид и нажав Save as...
Этот формат можно сразу подавать процедуре построения контуров.

P.S. Всем спасибо за советы.

lam
Гуру
Сообщения: 690
Зарегистрирован: 01 авг 2012, 13:55
Репутация: 170

Re: Импорт готовой сетки в Surfer

Сообщение lam » 13 май 2016, 12:42

lvlex писал(а):Iam, спасибо вам за внимательность.
Жмите палец вверх :)

nickleb
Гуру
Сообщения: 788
Зарегистрирован: 22 май 2010, 20:20
Репутация: 83

Re: Импорт готовой сетки в Surfer

Сообщение nickleb » 14 май 2016, 16:11

Здравствуйте! lvlex, eсли скриптовать (имеет смысл для работы с множеством файлов) Вашу задачу в Scripter'е Surfer'а (это я в Surfer'е 8 с Вашим 3-ёх-колоночным файлом регулярного растра попробовал), то вот так приблизительно это будет:

Код: Выделить всё

Sub Main

	Debug.Clear

	'''*** Folder ************************************************************************************************
	FolderWork$ = "D:\2016_for_LVLEX"

	Debug.Print "START of Work...."
	'''*** Declare object and string variables used in the script
	Dim SurferApp, Plot  As Object
	'''*** Create the Surfer Application object and assign it to the "SurferApp" variable
	Set SurferApp = CreateObject("Surfer.Application")
	'''*** Make Surfer visible
	'SurferApp.Visible = True
	'''*** Make Surfer not visible
	SurferApp.Visible = False

	ChDir(FolderWork$)

	MaskSourceFile$ = "dat_??.txt"

	SourceFile$=Dir$(MaskSourceFile$,0)

	'** Loop by Source Files
	While(SourceFile$<>"")

		Full_Name_of_Source_File$ = FolderWork$ + "\"+ SourceFile$

		TargetFile$   =  Replace$(SourceFile$,"txt","grd")

		Full_Name_of_Target_File$  = FolderWork$ + "\" + TargetFile$

		'*** Load SourceFile$ ******************************************
		Dim Wks As Object
		'** Open Full_Name_of_Source_File$
		Set Wks = SurferApp.Documents.Open(Full_Name_of_Source_File$)

		'Declares WksRange as an object
 		Dim WksRange As Object

		'Assigns Columns A, B, and C to the variable named "WksRange"
 		Set WksRange = Wks.Columns(Col1:=1, Col2:=3)
		'Declares WksStatistics as an object
		Dim WksStatistics As Object

		'Stores the statistics of the range in the variable named "WksStatistics"
 		Set WksStatistics = WksRange.Statistics

		'*** GRID GEOMETRY *********************************************
		grid_X_min =  WksStatistics.Minimum(1)
  		grid_X_max =  WksStatistics.Maximum(1)

  		grid_Y_min =  WksStatistics.Minimum(2)
  		grid_Y_max =  WksStatistics.Maximum(2)

  		Grid_Step_Y = Wks.Cells(2,2) - Wks.Cells(1,2)

  		First_X = Wks.Cells(1,1)

  		For x=1 To WksStatistics.Count(1)
			Current_X = Wks.Cells(x,1)
			If Current_X <> First_X Then
				X_Not_Equal_First_X = Current_X
				Exit For
			End If
		Next x

		Grid_Step_X = X_Not_Equal_First_X - First_X

		grid_Ncol = 1 + (grid_X_max-grid_X_min)/Grid_Step_X
  		grid_Nrow = 1 + (grid_Y_max-grid_Y_min)/Grid_Step_Y

  		Debug.Print "grid_Ncol="; grid_Ncol; " grid_Nrow="; grid_Nrow

		'****************************************************************

		'** Grid-Function ***********************************************
		SurferApp.GridData (DataFile:=Full_Name_of_Source_File$, _
			xCol:=1, yCol:=2, zCol:=3, _
			DupMethod:=srfDupNone, _
			NumCols:=grid_Ncol, _
			NumRows:=grid_Nrow, _
			xMin:=grid_X_min, _
			xMax:=grid_X_max, _
			yMin:=grid_Y_min, _
			yMax:=grid_Y_max, _
			Algorithm:=srfNearestNeighbor, _
			ShowReport:=False, _
			OutGrid:=Full_Name_of_Target_File$, _
			OutFmt:=srfGridFmtAscii)

		'** Print Full_Name_of_Source_File$ and Full_Name_of_Target_File$
		Debug.Print Full_Name_of_Source_File$; " ==> "; Full_Name_of_Target_File$

		Wks.Close

		SourceFile$=Dir$()

		Wend
	Debug.Print "FINISH of Work!!!"

End Sub
:

lvlex
Новоприбывший
Сообщения: 7
Зарегистрирован: 10 май 2016, 16:43
Репутация: 0

Re: Импорт готовой сетки в Surfer

Сообщение lvlex » 01 июн 2016, 17:21

Не было возможности зайти, сделал почти так же. За исключением того что в Surfer я подавал готовый грид который мне все-таки удалось сделать. А работать со скриптером мне понравилось. Когда работаешь с графическим интерфейсом, он действительно не удобен для визуализации, а со скриптером -- красота. В итоге скрипт обрабатывал все имеющиеся гриды, обрезал их по контуру, строил изолинии, ну и прочие косметические настройки.

В итоге пришлось повозиться, но удалось добиться почти полной автоматизации.

nickleb
Гуру
Сообщения: 788
Зарегистрирован: 22 май 2010, 20:20
Репутация: 83

Re: Импорт готовой сетки в Surfer

Сообщение nickleb » 01 июн 2016, 19:47

lvlex писал(а):... а со скриптером -- красота...
согласен!..

Ответить

Вернуться в «Surfer»

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

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