From si at iki.fi Sun Nov 7 11:33:57 1999 From: si at iki.fi (Sami Itkonen) Date: Thu Aug 5 00:02:14 2004 Subject: Helsinki.PM tapaaminen tiistaina 9.11 klo 19 Message-ID: <19991107193357.50327@alpha.hut.fi> Niin, taasen on aika kutsua mongertajat kokoon jutustelemaan hassuja. Paikkana tällä kertaa on Otaniemen "Keltsu" (ellei jollakulla ole parempaa ehdotusta). -- Email: si@iki.fi, WWW: From jhi at iki.fi Tue Nov 9 01:57:28 1999 From: jhi at iki.fi (Jarkko Hietaniemi) Date: Thu Aug 5 00:02:14 2004 Subject: Helsinki.PM tapaaminen tiistaina 9.11 klo 19 In-Reply-To: <19991107193357.50327@alpha.hut.fi> References: <19991107193357.50327@alpha.hut.fi> Message-ID: <14375.54248.286010.351895@jaspis.hut.fi> Sami Itkonen writes: > Niin, taasen on aika kutsua mongertajat kokoon jutustelemaan hassuja. > Paikkana t?ll? kertaa on Otaniemen "Keltsu" (ellei jollakulla ole > parempaa ehdotusta). Min? en kyll? valitettavasti p??se tulemaan. -- $jhi++; # http://www.iki.fi/jhi/ # There is this special biologist word we use for 'stable'. # It is 'dead'. -- Jack Cohen From Sami.Poikonen at tietoenator.com Tue Nov 9 02:19:13 1999 From: Sami.Poikonen at tietoenator.com (Sami.Poikonen@tietoenator.com) Date: Thu Aug 5 00:02:14 2004 Subject: Helsinki.PM tapaaminen tiistaina 9.11 klo 19 Message-ID: <02BB87563D65D0119A8E0000F8309DAACB61ED@eemeli.unic.fi> >From: Jarkko Hietaniemi > >Sami Itkonen writes: > > Niin, taasen on aika kutsua mongertajat kokoon jutustelemaan hassuja. > > Paikkana t?ll? kertaa on Otaniemen "Keltsu" (ellei jollakulla ole > > parempaa ehdotusta). > >Min? en kyll? valitettavasti p??se tulemaan. Kuten my?s t?ll?kertaa j?? v?liin. Sami Poikonen From operamail at earthlink.net Mon Nov 15 13:16:45 1999 From: operamail at earthlink.net (operamail@earthlink.net) Date: Thu Aug 5 00:02:14 2004 Subject: Best New Trade Show Display Opera Portables, Inc. Message-ID: <544.390637.467378@earthlink.net> Opera Portables, Inc. is presenting "by invitation" visits to our web site. Newly updated and packed full of exciting display projects and news, Opera is leading the industry with eye-popping visuals and an exhibit structure that is completely new. Opera is a young progressive company and winner of multiple industry awards, including Exhibitor Magazine's Best New Product, Ernst & Young's Crescendo Award, 40 Under Forty and Emerging Thirty. Go to http://opera.mswin.net/ and check us out. If you use displays you really owe it to yourself to see our stuff! operamail@earthlink.net From ajolma at water.hut.fi Fri Nov 19 03:50:25 1999 From: ajolma at water.hut.fi (Ari Jolma) Date: Thu Aug 5 00:02:14 2004 Subject: verkkoalgoritmi In-Reply-To: References: <14375.54248.286010.351895@jaspis.hut.fi> Message-ID: <199911190951.LAA29440@water.hut.fi> T?m? ei ole varsinaisesti Perl asia vaan yleisempi mutta silti. Puuhailen Perl-moduulin kimpussa, jonka on tarkoitus olla a) yleinen rastereiden (tai mit? termi? haluaakin k?ytt??, kyse on matriiseista) k?pistelyty?kalu, b) yleinen GIS ty?kalu ja c) yleinen hydrologinen GIS ty?kalu. N?m? rasterit ovat isoja (esim. 3000x3000) ja siksi algoritmit on p??asiassa C:ll? ja Perlill? on tehty n?pp?r? oliopohjainen ja operaattorit m??rittelev? API. Mutta siis siihen algoritmiin, joka tuottaa ongelmia koska ne implementaatiot jotka olen saanut aikaan ovat hitaita - luokkaa >10 tuntia isolle rasterille ajettuna eli esim. 10 x nopeutus auttaisi tosi paljon (ajelen n?it? omilla PIII:lla). Mulla on siis FDG (Flow Direction Grid), jonka jokaisessa pisteess? (i,j, jotka kuten matriiseissa) on kokonaisluku 0..9, 0 tarkoittaa, ett? solu on "pit" eli kuoppa, 1 tarkoittaa, ett? vesi virtaa t?st? pohjoiseen eli soluun (i-1,j), 2 tarkoittaa, ett? vesi virtaa koilliseen eli soluun (i-1,j+1), jne. Ideana olisi poistaa painanteet eli alueet, joissa vesi valuu soluun, joka ei ole gridin reunalla. Olen tehnyt sen, niin, ett? (i) etsin alueen reunalta alimman solun (ii) muutan polun siit? pitiin kulkemaan toisinp?in ja (iii) sen itsens? purkautumaan alueen ulkopuolelle alimpaan naapuriinsa. Olen sill? tavalla h?lm?, ett? minusta n?it? on hauska v?s?t? itse ja t?ll? kertaa se voi olla syyn? siihen ett? tulos on noin hidas. Ehk?p? algoritmikirjallisuudessa olisi parempi ratkaisu, ja joku voisi viitata minut siihen tai antaa mielest??n nopean koodin niin testaan. Nopea ratkaisu voisi olla sellainen, joka k?visi koko alueen l?pi ja hakisi reunapisteet siin? samalla. Viel? sen verran ett? FDG lasketaan DEMist?, joka on korkeusmalli mutta t?ll? seikalla ei ole t?m?n algoritmin kanssa tekemist?. Toivottavasti en pilaa nyt kenenk??n viikonloppua ;-) Ari t?ss? mun t?m?nhetkinen versio: int fixpit(GRID *fdg, GRID *dem, GRID *mark, int i, int j) { int i0,j0,i2,j2,ilbp,jlbp,ilbpn,jlbpn,d; REAL lbp,lbpn; #ifdef DEBUG_ENABLED if (debug) fprintf(stderr,"fix pit at %i,%i\n",i,j); #endif memset(mark->sdata,0,mark->M*mark->N*sizeof(INTEGER)); markbasin(fdg, mark, i, j); #ifdef DEBUG_ENABLED if (debug>1) fprintf(stderr,"basin marked %i,%i\n",i,j); #endif /* walk the border, start from top and walk clockwise */ i2 = i; j2 = j; while (i2 > 0 AND sgd(mark,i2-1,j2)) { #ifdef DEBUG_ENABLED if (debug>3) fprintf(stderr,"up to border, at cell %i,%i\n",i2,j2); #endif i2--; } /* d is the direction where we go */ d = 3; #ifdef DEBUG_ENABLED if (debug>3) fprintf(stderr,"start walking, at cell %i,%i, going %i\n",i2,j2,d); #endif ilbp = i0 = i2; jlbp = j0 = j2; lbp = fgd(dem,i2,j2); do { /* test clockwise, the first dir to test depends on our current direction */ /* test direction is d2 */ int d2 = -1; int done = -1; #ifdef DEBUG_ENABLED if (debug>3) fprintf(stderr,"walking, at cell %i,%i, going %i, current low is %i,%i %f\n",i2,j2,d,ilbp,jlbp,lbp); #endif switch (d) { sagain: case 1: case 2: { if (i2 > 0 AND j2 > 0 AND sgd(mark,i2-1,j2-1)) { d2 = 8; i2--; j2--; break; } if (i2 > 0 AND sgd(mark,i2-1,j2)) { d2 = 1; i2--; break; } } case 3: case 4: { if (i2 > 0 AND j2 < mark->N-1 AND sgd(mark,i2-1,j2+1)) { d2 = 2; i2--; j2++; break; } if (j2 < mark->N-1 AND sgd(mark,i2,j2+1)) { d2 = 3; j2++; break; } } case 5: case 6: { if (i2 < mark->M-1 AND j2 < mark->N-1 AND sgd(mark,i2+1,j2+1)) { d2 = 4; i2++; j2++; break; } if (i2 < mark->M-1 AND sgd(mark,i2+1,j2)) { d2 = 5; i2++; break; } } case 7: case 8: { if (i2 < mark->M-1 AND j2 > 0 AND sgd(mark,i2+1,j2-1)) { d2 = 6; i2++; j2--; break; } if (j2 > 0 AND sgd(mark,i2,j2-1)) { d2 = 7; j2--; break; } } } /* if new direction is not found, try once more */ done++; #ifdef DEBUG_ENABLED if (debug>3) fprintf(stderr,"do I have the new dir (%i)? %i\n",d2,done); #endif if (d2 == -1 AND !done) goto sagain; d = d2; if (fgd(dem,i2,j2) < lbp) { lbp = fgd(dem,i2,j2); ilbp = i2; jlbp = j2; } } while (!(i2 == i0 AND j2 == j0)); #ifdef DEBUG_ENABLED if (debug>1) fprintf(stderr,"lowest border point is at %i,%i\n",ilbp,jlbp); #endif /* if the lowest border point is at the border of the whole grid then that will become a pit, else search for the lowest neighbor not in the depression */ ilbpn = -1; jlbpn = -1; if (ilbp > 0 AND ilbp < mark->M-1 AND jlbp > 0 AND jlbp < mark->N-1) { lbpn = 99999999.9; i2 = ilbp; j2 = jlbp; i2--; if (i2 >= 0 AND !sgd(mark,i2,j2) AND fgd(dem,i2,j2) < lbpn) { lbpn = fgd(dem,i2,j2); ilbpn = i2; jlbpn = j2; } j2++; if (i2 >= 0 AND j2 < fdg->N AND !sgd(mark,i2,j2) AND fgd(dem,i2,j2) < lbpn) { lbpn = fgd(dem,i2,j2); ilbpn = i2; jlbpn = j2; } i2++; if (j2 < fdg->N AND !sgd(mark,i2,j2) AND fgd(dem,i2,j2) < lbpn) { lbpn = fgd(dem,i2,j2); ilbpn = i2; jlbpn = j2; } i2++; if (i2 < fdg->M AND j2 < fdg->N AND !sgd(mark,i2,j2) AND fgd(dem,i2,j2) < lbpn) { lbpn = fgd(dem,i2,j2); ilbpn = i2; jlbpn = j2; } j2--; if (i2 < fdg->M AND !sgd(mark,i2,j2) AND fgd(dem,i2,j2) < lbpn) { lbpn = fgd(dem,i2,j2); ilbpn = i2; jlbpn = j2; } j2--; if (i2 < fdg->M AND j2 >= 0 AND !sgd(mark,i2,j2) AND fgd(dem,i2,j2) < lbpn) { lbpn = fgd(dem,i2,j2); ilbpn = i2; jlbpn = j2; } i2--; if (j2 >= 0 AND !sgd(mark,i2,j2) AND fgd(dem,i2,j2) < lbpn) { lbpn = fgd(dem,i2,j2); ilbpn = i2; jlbpn = j2; } i2--; if (i2 >= 0 AND j2 >= 0 AND !sgd(mark,i2,j2) AND fgd(dem,i2,j2) < lbpn) { lbpn = fgd(dem,i2,j2); ilbpn = i2; jlbpn = j2; } if (ilbpn == -1) { fprintf(stderr,"fixpit: FAILED: the lowest border point of a depression at point (%i,%i) does not have a neigbor outside the depression\n",i,j); return 0; } #ifdef DEBUG_ENABLED if (debug>1) fprintf(stderr,"escape from the depression: %i,%i,%i,%i\n",ilbp,jlbp,ilbpn,jlbpn); #endif } if (ilbp != i OR jlbp != j) { /* invert the path from the lowest border point to the pit point */ int im = ilbp; int jm = jlbp; int da = 0; int db = sgd(fdg,im,jm); int tmp; i2 = ilbp; j2 = jlbp; do { movetodir(i2, j2, db); inversedir(da, tmp); sgd(fdg,im,jm) = tmp; im = i2; jm = j2; da = db; db = sgd(fdg,im,jm); } while (db); inversedir(da, tmp); sgd(fdg,im,jm) = tmp; } /* a new pit point at the border of the grid or escape from the depression */ if (ilbpn == -1) sgd(fdg,ilbp,jlbp) = 0; else { if (jlbp == jlbpn) { if (ilbpn-ilbp == 1) sgd(fdg,ilbp,jlbp) = 5; else if (ilbp-ilbpn == 1) sgd(fdg,ilbp,jlbp) = 1; } else if (jlbp-jlbpn == 1) { if (ilbpn == ilbp) sgd(fdg,ilbp,jlbp) = 7; else if (ilbpn-ilbp == 1) sgd(fdg,ilbp,jlbp) = 6; else if (ilbp-ilbpn == 1) sgd(fdg,ilbp,jlbp) = 8; } else if (jlbpn-jlbp == 1) { if (ilbpn == ilbp) sgd(fdg,ilbp,jlbp) = 3; else if (ilbpn-ilbp == 1) sgd(fdg,ilbp,jlbp) = 4; else if (ilbp-ilbpn == 1) sgd(fdg,ilbp,jlbp) = 2; } } #ifdef DEBUG_ENABLED if (debug>1) fprintf(stderr,"pit fixed, hopefully\n"); #endif return 1; } From ajolma at water.hut.fi Mon Nov 22 12:36:52 1999 From: ajolma at water.hut.fi (Ari Jolma) Date: Thu Aug 5 00:02:14 2004 Subject: Grid moduuli Message-ID: Hmm, Korkeusmallien k?sittelyalgoritmit eiv?t kiinnosta? Minua kiinnostaisi tarjota kuitenkin tuota Grid-moduulia CPANiin ja, kuten PAUSE:n sivulla sanotaan, olisi hyv?, ett? asiasta olisi julkisesti keskusteltu ensin. T?ht?imess? siis on jonkinlainen perustuki rasteridatan py?ritt?miseen Perlill? (Perl/C:ll?) - k?ytt?aluehan on laaja, itse asiassa kyse on paljolti tavallisesta kuvank?sittelyst?. CPANin osastosta 18 (Images, Pixmap and ...) ei minusta kuitenkaan l?ydy sopivaa l?ht?kohtaa josta voisi l?hte? laajentamaan. Toisaalta homma on my?s sukua matriisien k?sittelylle, johon on Math::Matrix* moduulit, mutta ei kuitenkaan - esim. m??rittelin gridien tulon eri tavalla kuin matriisitulon. PDL taas periaatteessa voisi olla oikea ty?kalu mutta sen oppimisk?yr? tuntuu aika jyrk?lt? ja toisaalta sen k?ytt? tuntuu overkillilt? - kokeilin kyll? mutta en saanut oikein mit??n j?rkev?? aikaiseksi n?iden hommien suhteen, kun k?ytt?kelpoisen Grid.pm:n sain vastaavassa ajassa tehty? itse (kun olin oppinut xs:n, joka ei sitten niin hankalaa olekaan itse asiassa). Oikea foorumi uudesta raster GIS softasta keskustelemiseen on varmaan comp.infosystems.gis, ep?ilen kuitenkin Perlin kantavuutta siell? t?ss? vaiheessa, porukka k?ytt?? l?hinn? Arc/Infoa (ESRI:lt?, hinta useita kymmeni? tuhansia markkoja). Ehdottomasti kuitenkin kannattaa mainostaa siell?kin, jos ja kun t?t? softaa CPANiin saa. Toisaalta 2-ulotteisen datan k?sittely on, kuten PDL:n jossain dokussa sanotaan yleens? moniulotteisesta datasta, tieteellisen laskennan voi ja leip? useasti. Kaukokartoituskuvien tai periaatteessa mink? tahansa kuvien k?sittely tulee mieleen. Ei-Perl ty?kaluja on mm. Khoros, joka on nyttemmin kai kaupallinen, ja sitten erilaiset laitokset on tehneet omia isoja l?hinn? Fortran-pitoisia mammutteja, jotka on l?hinn? tuskaa asentaa ja k?ytt??. Monissa on viel? idioottimainen GUI-liittym? (kuten muuten paljolti ARc/Infossa ja muissa GISseiss?) kun t?ll? Perl-moduulilla ja parin rivin wrapperille saa aikaiseksi ymp?rist?n, jossa voi mielin m??rin py?ritell? rastereita ja katsella/analysoida niit?. Ok, mit? ongelmia tuon Gridin kanssa voi tulla? Portattavuus? Bin??rimuotoisena tallennettu 2d-data ei varmaan siirry suoraan erilaisiin koneisiin mutta ei kai se ole iso ongelma, voihan datan siirt?? asciina. Eip? tule nyt muuta mieleen. Ehk? koko moduuli kannattaisi suunnitella alusta pit?en itsekin modulaariseksi, eli niin ett? perustoimintojen lis?ksi mukaan voi ottaa valinnaisesti hydrologia/GIS paketin, mahdollisesti tulevaisuudessa mukana olevan hahmontunnistuspaketin, jne. Grafiikkaan olen k?ytt?nyt PGPLOTtia, joka on oikein n?pp?r?. Joo, keskustelkaa nyt jotain ja osoittakaa kiinnostusta, niin voin laittaa sen viestiin modules@perl.orgiin :-). Muuten siit? valuma-aluealgoritmista, saattaa tuntua uskomattomalta mutta n?iden asioiden (basin delineation, stream network from DEM yms.) ymp?rilt? l?ytyy artikkeleita arvovaltaisista tiedelehdist? viime vuosikymmenilt? useita, ellei useita kymmeni?. Ari