Alle auf den folgenden Seiten vorgestellten Skripten müssen in Form einer IwanScript Datei (*.iws) in einem Pfad eines virtuellen Iwan - Verzeichnis gespeichert werden und können dann über einen Aufruf im Browser ausgeführt werden.
Alle auf den folgenden Seiten vorgestellten Skripten müssen in Form einer IwanScript Datei (*.iws) in einem Pfad eines virtuellen Iwan - Verzeichnis gespeichert werden und können dann über einen Aufruf im Browser ausgeführt werden.
Go; /*-------------------------------------------------------------- Diese IWS - Datei zeigt die Schritte zur Erstellung eine einfachen Übersicht über die Zugriffe einer Sitzung auf Ebenen zur Darstellung --------------------------------------------------------------*/ //-------------------------------- //Zuerst wird überprüft, ob ein Projet existiert. //Falls nicht, wird das Script abgebrochen. //-------------------------------- IF(IsNULL(GetActiveProject())); EndScript; ENDIF; //Ein Session - Objekt wird erstellt ret=CreateObject(ses,"SESSION"); //----------------------- routine "SHOWSTAT"; //----------------------- // Hinweis: // Setzt vorraus, das die Statistik durch "old=ses.UseLayerStat(true);" aktiviert wurde! arr=ses.LayerStatList(); print(""); while(arr.next()); print(""); wend(); print("
Layername | Zeichenzugriffe auf diese Ebene | gez. Elemente |
"+replace(arr.item(),":"," | ")+" |
");
EndRoutine();
End;
Go; /*-------------------------------------------------------------- Diese IWS - Datei erstellt eine Übersicht aller Layer des gerade aktiven Projektes. Es sind keine Parameter zu übergeben. In einer Tabellenzeile wird der Name einer Ebene, die für sie verwendeten Symbole, ihr Titel, die Beschreibung und der Ebenentyp angegeben. Zusätzlich enthält sie alle Sachdaten- felder der Ebene und die Angaben zu Min- und MaxScale. Eine Erweiterung ist sehr einfach möglich. --------------------------------------------------------------*/ //-------------------------------- //Zuerst wird überprüft, ob ein Projet existiert. //Falls nicht, wird das Script abgebrochen. //-------------------------------- IF(IsNULL(GetActiveProject())); EndScript; ENDIF; //Ein Layers - Objekt wird erstellt, das alle einzelnen Ebenen enthält ret=CreateObject(lay,"LAYERS"); End; <html> <head> <title>ProjektInformation</title> <style type=text/css> body {background-color:#f0f0f0;} table {color:black;font-size:8pt;} tr.normal td {background-color:white;border:1px solid #bbbbbb;} tr.head {font-weight:bold;text-align=center;} td.lef {text-align:left;vertical-align:top;} td.mid {text-align:center;vertical-align:top;} td.leg {text-align:center;vertical-align:middle;} </style> </head> <body> <center> <!--Die Überschrift enthält Projektnamen und die Anzahl der Ebene im Projekt--> <b>Das aktuelle Projekt mit dem Namen "Go;GetActiveProject();End;" enthält Go;lay.count();End; Layer</b> <br> </center> <table width=100% cellspacing=2 cellpadding=0> <tr class="head"> <td>Nr.</td> <td>Name</td> <td>Symbol</td> <td>Titel</td> <td>Beschreibung</td> <td>Typ</td> <td>Elemente</td> <td>Sachdaten - Felder</td> <td>MaxScale</td> <td>MinScale</td> </tr> Go; ret=lay.first(); index=0; //Ein Array mit allen möglichen Layertypen wird erstellt ret=CreateObject(types,"ARRAY"); layerTypen="Ungültig|Shapefile(alt)|Datenbank|Memory|Raster|Datenbank-Katalog|"; layerTypen=layerTypen+"Image-Katalog|SDE|Annotation|DUMMY|Generisch|User"; ret=types.FromString(layerTypen,"|"); //Für alle Layer des Projektes wird eine Tabellenzeile generiert while(lay.next()); index++; layer=lay.GetItem(); //für jeden Layer wird ein Layer - Objekt erzeugt print("<tr class="normal"><td class="mid">"+int(index)+"</td>"); print("<td class="mid">"+layer.Name()+"</td>"); print("<td class="leg"><img src='___MAP.__SYS__?Action=GetLegSymbol&theLayer="+layer.Name+"'></td>"); print("<td class="mid">"+iif(IsNull(layer.LayerTitle())," ",layer.LayerTitle)+"</td>"); print("<td class="lef">"+layer.Description()+"</td>"); print("<td class="lef">"+types.At(int(layer.Type()))+"</td>"); print("<td class="lef">"+layer.Count()+"</td>"); fields=layer.GetFields(); ret=fields.first(); ret=createObject(arr,"ARRAY"); while(fields.next()); ret=arr.add(fields.Item); wend; print("<td class="lef">"+arr.AsString(",")+"</td>"); print("<td class="lef">"+iif(layer.MaxScale()=="-1"," ",layer.MaxScale())+"</td>"); print("<td class="lef">"+iif(layer.MinScale()=="-1"," ",layer.MinScale())+"</td></tr>"); wend; End; </table> </body> </html>
Go; /* Namensauflösung für IP-Addressen Argumente für dieses Skript: IPS=ListDerAddressen Es kann eine einzelne Addresse angegeben werden, oder kommasepariert eine Liste */ End; <html> <head> <title>Reverse DNS Lookup</title> <style type=text/css> BODY,TABLE,TR {font-family:Verdana;font-size:12px;font-weight:800;} TR.HEAD {font-weight:800;} TR.A {color:#0000FF;background-color:#CCCCCC;} TR.B {color:#0000DF;background-color:#DDDDDD;} </style> </head> <body> <script> self.focus(); </script> Go; IF(isnull($IPS)); print("Keine Adresse übergeben (ips ist leer)!"); ELSE; ret=CreateObject(arr,"Array"); count=arr.FromString($IPS,iif(isnull($SEP),",",$SEP)); ret=arr.RemoveDup(); IF(arr.First()) print("<table width=100% border=0 cellpadding=4 cellspacing=0>"); print("<tr class="HEAD"><td align=center>IP</td><td></td><td align=center>Host</td></tr>"); flag=true; while(arr.Next()); flag=not(flag); host=ReverseDNSLookup(arr.Item()); print("<tr class="+iif(flag,"A","B")+"><td nowrap>"+arr.Item()+"<td>:</td>"); print("<td nowrap width=100%>"+iif(isnull(host),"-k.A.-",host)+"</td></tr>"); wend; print ("</table>"); ENDIF; ENDIF; End; </body> </html>
Go; /*--------------------------------------------------------------------------------- Stellt Symbole einer Symbolpalette dar. Der Startparameter ist FILE=DateiNameDerIpal Es wird ein Frameset erstellt, in welchem die Symbole in einer Tabelle ausgegeben werden. Wird diese Fenster per modalem Dialog geöffnet (nur IE), wird nach einem Klick auf das Symbol die Symbolnummer in dialogArguments.symbol zurückgegeben. Beispielaufruf: //JavaScipt in IE function ShowSymbolDump() { if(smbSet=="") smbSet='..\\symbols\\main.ipal'; var url='http://{IhrServer}/DumpSymbol.iws?file='+smbSet; var args=new Object(); args.symbol=-1; var features="dialogWidth:500px ;dialogHeight:540px ;center:yes; status:no; edge:raised"; var ret=showModalDialog(url,args,features); if(args.symbol!=-1) { alert("Symbol:"+args.symbol; } } ---------------------------------------------------------------------------------*/ w=60; //Default-Width der Symbole in px h=50; //Default-Height der Symbole in px //--------------------------------------- // kein Index übergeben, also die // Seite erstellen //---------------------------------------- if(ISNULL($INDEX)); if(ISNULL($FILE)); print("Bitte in Argument FILE einen gültigen Dateinamen übergeben!"); EndScript(); EndIf; ret=CreateObject(srv,"Server"); //--------------------------------------------------- // Prüfen ob, die Serverversion ausreichend ist! // Ist dies nicht der Fall, Abbruch des Skriptes. //--------------------------------------------------- if(not(srv.IsNeededVersion("3.0.3.20"))); print("Dieses Skript erfordert eine IWAN Version 3.0.3.20+"); EndScript(); EndIf; //--------------------------------------------- // Symbolset-Objekt erstellen //--------------------------------------------- ret=CreateObject(smb,"Symbolset"); //----------------------------------------------------------------- // Auslesen der Symbolanzahl, // Exisitert die Datei nicht bricht das Skript mit einem Fehler ab //----------------------------------------------------------------- smbCount=smb.GetCount($FILE); count=smbCount; idx=0; PerPage=20; //Anzahl der Symbole pro Seite thisFile=GetScriptFile(false); //Namen dieses Skriptes auslesen (ohne Pfad) if(isnull($PART)); //Wurde in PART nichts in der URL ausgegeben wird hier das Frameset erstellt End; <html> <head> <title> Ansicht des Symbolset Go;print($FILE);End;</title> Go;call "LABELStyle";End; <script> function onImageClick(idx) { if(window.dialogArguments) { window.dialogArguments.symbol=idx; } self.close(); } </script> </head> <frameset rows="*,170" framespacing=0 frameborder=0> <frame name=right src="Go;print(thisFile+"?part=R&FILE="+$FILE+"&startAt=0")End;"> <frame name=left src="Go;print(thisFile+"?part=L&file="+$FILE+"&count="+int(count));End;"> </frameset> </html> Go; EndScript(); else;//PART enthält eine Wert.... //Erstellen der Link's.... if($PART=="L"); //erstellt die untere Seite des Fenster pages=count/PerPage; pages=int(pages); End; <html> <head> Go; /*StyleSheet schreiben*/ call "LABELStyle"; End; <style type=text/css> A{width:30px;margin:2px;} </style> </head> <body> <br>Symbolset: <b>Go;print($FILE);End;</b><br> <nobr> mit insgesamt: <b>Go;print(int(count));End;</b> Symbolen, Seitengröße :<b>Go;Print(int(pages));End;</b></nobr><br><br> <center> Go; i=0; while(compare(i,pages,le)); print("<a target=right href="+thisFile+"?part=R&FILE="+$FILE+"&startAt="+int(i*PerPage)+">-"+int(i)+"-</a> "); inc(i); wend; End; </center> </body> </html> Go; EndScript(); //und das Skript zu beenden EndIf;//... Part==L EndIf; //--------------------------------------------- // Wenn bis hier gekommen (PART!=L) // dann die Tabelle mit den Symbolen erstellen //--------------------------------------------- count=min(PerPage,count); End; <html> <head> Go;call "LABELStyle";End; <script> function onImageClick(idx) { if(top.onImageClick)top.onImageClick(idx); } </script> </head> <body> <center><br> <table style="border:6px solid Black;background-color:White;"> <tr><td style="padding:6px;"> <table cellpadding=3 cellspacing=3> Go; index=idx; if(not(isnull($STARTAT))); index=$STARTAT; EndIf; thisFile=GetScriptFile(false); imgSize="width= "+int(w)+" height="+int(h); while(Compare(idx,count,lt)); print("<tr>"); i=0; while(Compare(i,5,lt)); print("<td align=center>"); print("<img "+imgSize+" onClick='onImageClick("+int(index)+")' src='"+thisFile+"?FILE="+$FILE+"&INDEX="+int(index)+"'>"); print("<br>"+int(index)+"</td>"); inc(i);inc(idx);inc(index); if(index==smbCount);i=21;idx=count;EndIf; wend; print("</tr>"); wend; print("</table></td></tr></table></center>"); diff=smbCount-index; if(Compare(diff,0,gt)); print("<center><a href=dumpsymbol.iws?part=R&FILE="+$FILE+"&startAt="+int(index)+">"); print("Die nächsten "+int(min(diff,PerPage))+" Symbole anzeigen</a></center>"); EndIf; print("</body></html>"); EndScript(); else;//INDEX==NULL //------------------------------------------------------------ // an dieser Stelle // wird das Symbol generiert und als Bild zurückgegeben //------------------------------------------------------------ s=0.0001; color="White"; if(not(IsNull($W)));w=$W;EndIf; if(not(IsNull($H)));h=$H;EndIf; if(not(IsNull($S)));s=$S;EndIf; if(not(IsNull($COLOR)));color=$COLOR;EndIf; ret=CreateObject(smb,"Symbolset"); smb.Scale(s); smb.ImageWidth(w); smb.ImageHeight(h); smb.ImageBGColor(color); smb.GetSymbolFromFile($FILE,$INDEX); EndScript(); endif; //--------------------------- routine "LABELStyle"; //--------------------------- End; <style type=text/css> IMG{cursor:Hand;} BODY,TR,TD{font-size:10px;font-family:Verdana;} BODY{margin:5px;background-color:#CDCDCD;overflow:hidden;} A{color:White;font-weight:Bold;text-decoration:none;background-color:Black;border:1px solid black;} A:HOVER,A:ACTIVE{color:Black;border:1px solid black;background-color:White;} A:ACTIVE{background-color:Yellow;color:Red;} </style> Go; EndRoutine; End;
Go;
Call "main";
// ---------------------------------------------------#-
// main
// ---------------------------------------------------#-
routine "main";
ret=CreateObject(response,"RESPONSE");
ret=response.SendContinue();
response.SetHeader("ContentType","text/xml");
ret=CreateObject(geom,"Geometry");
ret=CreateSession();
prj=iif(isNull($PROJECT),"bau",$PROJECT);
prjSrs=31469;//server.GetProjection(GetActiveProject());
ret=SetActiveProject(prj);
if(Compare(GetActiveProject(),prj,EQ));
ret=CreateObject(server,"SERVER");
ret=CreateObject(request,"REQUEST");
ret=CreateObject(wfs,"WFSREQUEST");
// den BaseUrl bestimmen
if (Compare(Len(request.Referer),0,EQ));
sBaseUrl=printf("%s://%s%s",request.Protocol(),request.Host(),request.Url());
else;
sBaseUrl=request.Referer();
endif;
if (wfs.ParseRequest());
if (Compare(wfs.Request,"GetCapabilities",EQ));
Call "GetCapabilities";
endif;
if (Compare(wfs.Request,"DescribeFeatureType",EQ));
Call "DescribeFeatureType";
endif;
if (Compare(wfs.Request,"GetFeature",EQ));
Call "GetFeature";
endif;
else;
ret=CreateObject(exception,"OGCServiceException");
ret=exception.Add("INVALID OR EMPTY REQUEST: "+wfs.LastError(),"0x0002","wfs.iws");
exception.Xml();
endif;
else;
ret=CreateObject(exception,"OGCServiceException");
ret=exception.Add("SCRIPT: Could not set session or project '"+prj+"' not available","0x0001","wfs.iws");
exception.Xml();
endif;
EndRoutine;
// ---------------------------------------------------#-
// GetFeature
// ---------------------------------------------------#-
routine "GetFeature";
End;<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>Go;
wfs.RenderToStream();
if(wfs.LastError!="");
ret=CreateObject(exception,"OGCServiceException");
ret=exception.Add("GetFeature: "+wfs.LastError(),"0x0020","wfs.iws");
exception.Xml();
endif;
EndRoutine;
// ---------------------------------------------------#-
// DescribeFeatureType
// ---------------------------------------------------#-
routine "DescribeFeatureType";
End;<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>Go;
result=wfs.DescribeLayersAsXsd();
if(wfs.LastError()!="");
ret=CreateObject(exception,"OGCServiceException");
ret=exception.Add("DescribeFeatureType: "+wfs.LastError(),"0x0010","wfs.iws");
exception.Xml();
else;
print(result);
endif;
EndRoutine;
// ---------------------------------------------------#-
// GetCapabilities
// ---------------------------------------------------#-
routine "GetCapabilities";
End;<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
<WFS_Capabilities version='1.0.0'
xmlns='http://www.opengis.net/wfs'
xmlns:ogc='http://www.opengis.net/ogc'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<Service>
<Name>IWAN WFS MapServer Beta 1</Name>
<Title>IWAN MapServer</Title>
<Abstract></Abstract>
<Keyword></Keyword>
<OnlineResource>
Go;print(sBaseUrl);End;
</OnlineResource>
<Fees>NONE</Fees>
<AccessConstraints>NONE</AccessConstraints>
</Service>
<Capability>
<Request>
<GetCapabilities>
Go;Call "WriteDCPType";End;
</GetCapabilities>
<DescribeFeatureType>
<SchemaDescriptionLanguage>
<XMLSCHEMA />
</SchemaDescriptionLanguage>
Go;Call "WriteDCPType";End;
</DescribeFeatureType>
<GetFeature>
<ResultFormat>
<GML2 />
</ResultFormat>
Go;Call "WriteDCPType";End;
</GetFeature>
</Request>
</Capability>
<FeatureTypeList>
<Operations>
<Query />
</Operations>
Go;
ret=CreateObject(layers,"LAYERS");
if(layers.first());
while(layers.next()==true);
layer=layers.GetItem(layers.Item());
//if(not(InList(layers.item,"L1","L48")));Continue;EndIf;
if(Compare(layer.ContentType(),"VECTOR",EQ)|Compare(layer.ContentType(),"ANNO",EQ));
End;
<FeatureType>
<Name>iwan:Go;layer.Name();End;</Name>
<Title>Go;HTMLEncode(layer.LayerTitle());End;</Title>
<Abstract>Go;HTMLEncode(layer.Description());End;</Abstract>
<Keywords>iwan Go;layer.Name();End; Go;HTMLEncode(layer.LayerTitle());End;</Keywords>
<SRS>EPSG:Go;print(prjSrs);End;</SRS>
Go;
extent=layer.GetExtent();
if(extent.Valid¬(extent.Unknown));
call "printBBox";
endif;
End;
</FeatureType>
Go;
endif;
wend;
endif;
End;
</FeatureTypeList>
<ogc:Filter_Capabilities>
<ogc:Spatial_Capabilities>
<ogc:Spatial_Operators>
<ogc:Intersect />
<ogc:BBOX />
</ogc:Spatial_Operators>
</ogc:Spatial_Capabilities>
<ogc:Scalar_Capabilities>
<ogc:Logical_Operators />
<ogc:Comparison_Operators>
<ogc:Simple_Comparisons />
<ogc:Like />
</ogc:Comparison_Operators>
</ogc:Scalar_Capabilities>
</ogc:Filter_Capabilities>
</WFS_Capabilities>
Go;
EndRoutine;
// ---------------------------------------------------#-
// WriteDCPType
// ---------------------------------------------------#-
routine "WriteDCPType";
sUrl=printf("%s?%s",sBaseUrl,wfs.UnusedQueryString);
sUrl=HTMLEncode(sUrl);
End;
<DCPType>
<HTTP>
<Get onlineResource='Go;print(sUrl);End;' />
<Post onlineResource='Go;print(sUrl);End;' />
</HTTP>
</DCPType>
Go;
EndRoutine;
//----------------------------------------------------
routine "printBBox";
//----------------------------------------------------
strGeom=printf("gBOX:%.5f|%.5f|%.5f|%.5f",extent.Xmin,extent.yMin,extent.XMax,extent.YMax);
ret=geom.FromGeometry(strGeom);
ret=geom.Transform(prjSrs,4326);
ext1=geom.GetExtent();
printf("<LatLonBoundingBox minx='%.4f' miny='%.4f' maxx='%.4f' maxy='%.4f' />",ext1.Xmin,ext1.yMin,ext1.XMax,ext1.YMax);
EndRoutine;
End;