Quellcode-Programm-2

Version vom 20. Juni 2006, 13:52 Uhr von Carbon4 (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Ziel dieses Programmes ist es,aus der vorher erstellten Textdatei nun SVG/XML-Quellcode zu generieren,der im Browser angezeigt werden kann. Man hat auch die Option davon ein Bildschirmfoto generieren zu lassen,fuer Browser ohne PlugIn. Das sieht dann z.b. so aus.

  • out2.svg - SVG-Karte einzeln
  • map.jpg - Stadtkarte einzeln (300kb)
  • out.svg - SVG und Stadtkarte kombiniert (momentan noch falsches Mapping,muss mal die genauen Eckpunkte der Karte als GPS raussuchen 8)))
/* $VER makenodemap.rexx v0.1alpha */
zeit = subword(date(),1,1)||'-'||subword(date(),2,1)||','||substr(time(),1,5)||'uhr' /* 19-Jun,09:17uhr */
xmax = 661; ymax = 936; f1 = 'ram:2paint.txt'; textstyle = 'verdana'; textsize = 10
anonym=0; mobil=0; nodecount=0; ohnegps=0; cpuschnitt = 0; scalef = 3

kartexmin = 11.302; kartexmax = 11.3359   /*xmax hoeher rutscht karte nach links*/
karteymin = 50.9705; karteymax = 50.9919  /*ymax hoeher,rutscht karte tiefer*/

say '<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>'
say '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"'
say '  "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">'
say '<svg width="'||xmax||'" height="'||ymax||'" xmlns="http://www.w3.org/2000/svg">'
say '  <title>Netzknoten</title>'
say '  <desc>eine Karte des Weimarnetzes</desc>'
say '   <defs><symbol id="karte"><desc>NetzknotenUndLinien</desc>'


 IF open(p,f1,'r') then DO
  DO until EOF(p)
   z = readln(p)

   IF pos('=',z)>0 THEN DO
    ip     = subword(z,1,1)
    cpu    = subword(z,3,1)
    nom    = subword(z,8,1)
    IF nom =? THEN nom = ip
    IF cpu~=? THEN cpuschnitt = cpuschnitt + cpu
    CALL setclip(ip||cpu,subword(z,3,1))
    CALL setclip(ip||name,nom)
    CALL setclip(ip||x,subword(z,5,1))
    CALL setclip(ip||y,subword(z,6,1))
    xx = getclip(ip||x)
    yy = getclip(ip||y)
     IF xx~=? & yy~=? THEN DO
      nodecount = nodecount + 1
      offset=random(0,10)
      say '<circle cx="'||px(xx)||'" cy="'||py(yy)||'" r="6" fill="yellow" stroke="black" />'
      say '<text x="'||px(xx)+6||'" y="'||py(yy)+offset||'" font-family="'||textstyle||'" font-size="'||textsize||'px">'||getclip(ip||name)||'</text>'
     END
     ELSE ohnegps = ohnegps + 1
   END

   IF pos('=',z)=0 & pos('-',z)=0 THEN s = z   /* s = startip */
   IF pos('=',z)=0 & pos('-',z)=1 THEN DO
    t  = subword(z,2,1)                        /* t = targetip */
    sx = getclip(s||x); sy = getclip(s||y)
    tx = getclip(t||x); ty = getclip(t||y)
    IF px(sx)~=? & py(sy)~=? & px(tx)~=? & py(ty)~=? THEN DO
     say '<line x1="'||px(sx)||'" y1="'||py(sy)||'" x2="'||px(tx)||'" y2="'||py(ty)||'" style="stroke:black; stroke-width:0.5px;" />'
    END
   END

  END
 CALL close(p)
 END

say '<text x="'||px(11.3021)||'" y="'||py(50.9709)||'" font-family="'||textstyle||'" font-size="'||textsize||'px">...Netzknoten_anonym/mobil/ohneGPS/gesamt:_'||anonym||'/'||mobil||'/'||ohnegps||'/'||ohnegps+nodecount||'_,_Router-CPU-Auslastung:_'||trunc(cpuschnitt/(ohnegps+nodecount),2)||'</text>'
say '<text x="'||px(11.3021)||'" y="'||py(50.9706)||'" font-family="'||textstyle||'" font-size="'||textsize||'px">...erzeugt_mit_Commodore_AmigaOS_v3.1_+_ARexx_['||zeit||']</text>'

say '</symbol>'
say '<image id="map" x="0" y="0" width="'||xmax||'px" height="'||ymax||'px" xlink:href="map.jpg">'
say '</image>'
say '</defs>'

say '<use xlink:href="#map" />'
say '<use xlink:href="#karte" />'

say '</svg>'

exit

entfernung:
return 1000
parse arg x1,y1,x2,y2
say x1 y1 x2 y2
abstandx = x1 - x2; abstandy = y1 - y2
abstandx = abstandx * 70088; abstandy = abstandy * 111324
abstand = sqr((abstandx**2)+(abstandy**2))
say abstand
abstand = substr(abstand,1,pos('.',abstand)-1)
return abstand

sqr:
parse arg ra
as = (ra/2)+.1
do for 15; as = (as+ra/as)/2; end
return as

px:
parse arg xx
 IF xx<kartexmax & xx>kartexmin THEN DO
  xx = trunc(xmax/((kartexmax-kartexmin)/(kartexmax-xx)),0)
  xx = xmax - xx
 END
IF xx = '' THEN xx = ?
return xx

py:
parse arg yy
 IF yy<karteymax & yy>karteymin THEN DO
  yy = trunc(ymax/((karteymax-karteymin)/(karteymax-yy)),0)
 END
IF yy = '' THEN yy = ?
return yy