Как да направите топографска карта от оскъдни извадкови данни?

Трябва да направя топографска карта на терен, за който имам само доста оскъдни извадки от (x, y, надморска височина) данни. Очевидно не мога да направя напълно точна карта, но бих искал такава, която е в известен смисъл "гладка". Трябва да определя количествено "гладкостта" (вероятно реципрочната средна стойност на квадрата на кривината на повърхността) и искам да минимизирам обективна функция, която е сумата от две количества:

  • Грапавостта на повърхността
  • Средното квадратно разстояние между надморската височина на повърхността в точката на вземане на проби и действително измерената надморска височина в тази точка

Тъй като това, което всъщност искам, е топографска карта, наистина търся начин да конструирам контурни линии с постоянна надморска височина и може да има някакъв умен геометричен начин да направя това, без изобщо да се налага да говоря за повърхности. Разбира се, искам контурните линии също да са гладки.

Всякакви предложения са добре дошли. Надявам се, че това е добре позната числена задача. Доста добре се справям със C и имам практически познания по FORTRAN. За Matlab и R съм доста невеж.


По отношение на това къде се намират нашите проби: планираме приблизително равномерно разстояние, но ще вземем повече проби там, където топографията е по-интересна. Така например ще вземем проби от планински региони с по-голяма плътност от равнина. Но определено имаме някои възможности за избор относно вземането на проби и бихме могли да вземем дори проби, ако това опростява нещата. Единствените проблеми са

  • Не знаем колко терен ще трябва да картографираме, за да намерим елементи, които търсим.

  • Вземането на проба е умерено скъпо, от порядъка на 10 минути. Така че вземането на проби от мрежа 100x100 може да отнеме много време.


person Norman Ramsey    schedule 26.08.2009    source източник
comment
Вашите проби равномерно ли са разположени или случайни?   -  person Mark Ransom    schedule 26.08.2009
comment
Марк: можем да ги поставим където пожелаем. Добавих бележка по-горе.   -  person Norman Ramsey    schedule 26.08.2009


Отговори (4)


Кригинг интерполацията може да бъде от известна полза за плавно интерполиране на вашите редки извадки.

person Jim Lewis    schedule 26.08.2009

R има много различни подходящи инструменти. По-специално, погледнете пространствения изглед. Подобен въпрос беше зададен в R-Help преди, така че може да искате да погледнете това.

Вижте функциите contour. Ето някои данни:

x <- seq(-3,3)
y <- seq(-3,3)

z <- outer(x,y, function(x,y,...) x^2 + y^2 )

Първоначалният сюжет е малко груб:

contour(x,y,z, lty=1)

Бил Дънлап предложи подобрение: „Често работи по-добре да напаснеш гладка повърхност към данните, да оцениш тази повърхност върху по-фина решетка и да прехвърлиш резултата на контура. Това гарантира, че контурните линии не се пресичат една в друга и избягва фалшивите примки, които може да получите от изглаждането на самите контурни линии. Тънките плочи (Tps от библиотека(„полета“) и льосът (наред с други) могат да паснат на повърхността.“

library("fields")
contour(predict.surface(Tps(as.matrix(expand.grid(x=x,y=y)),as.vector(z))))

Това води до много плавен график, тъй като първо използва Tps(), за да пасне на данните, след което извиква contour. В крайна сметка изглежда така (можете също да използвате filled.contour, ако искате да бъде засенчен):

За графиката можете да използвате или lattice (както в горния пример), или пакета ggplot2. Използвайте функцията geom_contour() в този случай. Пример може да бъде намерен тук (ht Thierry):

ds <- matrix(rnorm(100), nrow = 10) 
library(reshape) 
molten <- melt(data = ds) 
library(ggplot2) 
ggplot(molten, aes(x = X1, y = X2, z = value)) + geom_contour()
person Shane    schedule 30.09.2009

Отличен преглед на алгоритъм за контуриране, може да се наложи първо да направите мрежа на повърхността, за да интерполирате върху решетка.

person Martin Beckett    schedule 26.08.2009
comment
Вече не е счупен, но мисля, че всъщност не е отговор на поставения въпрос. Изглежда, че този външен ресурс трябва да има функция и от тази функция ще начертае контурна карта. - person IRTFM; 01.04.2017

може би можете да използвате:

с

в R

person pageman    schedule 26.08.2009
comment
Страхувам се, че е твърде разпръснат, за да бъде полезен. GEOMap може да е полезна, но документацията е толкова сложна, че не мога да кажа. Генеративната топографска карта en.wikipedia.org/wiki/Generative_topographic_map изглежда по-обещаващо. - person Norman Ramsey; 26.08.2009
comment
всъщност това е gtm - Генеративно топографско картографиране - cran.r-project. org/web/packages/gtm/gtm.pdf - person pageman; 26.08.2009