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