The concepts of fractal and fractal geometry , which appeared in the late '70s , after the mid-80s have become part of everyday life of mathematicians and programmers. The word "fractal" comes from the Latin word "fractus" and is translated as "consisting of fragments". It was proposed by Benoit Mandelbrot in 1975 to refer to irregular , but self-similar structures, which he studied. The birth of fractal geometry is usually associated with the release in 1977 of the book by Mandelbrot `The Fractal Geometry of Nature '. In his works,

the results of other scientists working in the period 1875-1925 years in the same field (

Poincare , Fatou, Julia , Kantor , Hausdorff ) were used . But only now it is possible to combine their works into a single system .

re them with friends. Fractals created with the help of OpenWebGIS may be interesting not only from esthetic and mathematic point of view but for example it may be used for automatic generating of large amounts of geographical data which have any spatial distribution and attribute value regularities. Then the data may be used for some processes modeling.

Each point of a fractal (Mandelbrot set and Julia sets), created with the help of OpenWebGIS has the geographic coordinates. This means that you can export the data to other GIS, statistical programs, etc. and study in detail the fractal set. So created fractal is not the image, but the geographic vector layer consisting of the points created with the help of OpenLayers.

Layers->Export Layer to ... format". Loot at Figure 1.

The fractal shown in Figure 1 can be named "Fractal Julia set over London" and has Formula: Zn+1=atan(Zn*Zn*Zn*Zn*Zn)*atan(Zn*Zn*Zn*Z n*Zn); Zn= 0.38+0.0001*i; "i" is the imaginary unit; number of iteration=10

See interactive map of Fractal Julia set over London You can Export the Fractal Layer to other GIS formats - gml, geojson, csv, kml. To do it, use menu item "". Loot atThe fractal shown innamed "Fractal Julia set over London" and has Formula: Zn+1=atan(Zn*Zn*Zn*Zn*Zn)*atan(Zn*Zn*Zn*Zn*Zn); Zn="i" is the imaginary unit; number of iteration=10

Figure 1



The points have attributes: “iterationValue” - the total value of Z at the last iteration; “longitude”, “latitude” and “Time” - contingent date and time (measured from 1970.01.01) calculating the value of a point and applying it on the map - (The attribute “Time” can be used for the construction of fractal animation). In order to make a colorful fractal according to your taste, simply click on the word `legend` which is under the fractal layer name, then in the window that opens select the number of classes of the legend, select the field classification (iterationValue) and set the desired color for each class. To know about calculating of each point coordinates and

“iterationValue” and “Time” attributes, if you look at the

JavaScript `s code part

of

OpenWebGIS:

[ part of JavaScript code(click to open) ]

var DELTA=parseFloat(document.getElementById( "fractal_delta_id").value); //Decreasing this value increases the number of the points (less dense of the fractal) on the map

var CPS = 2;

var ArrayFeatures=[];

var MAX_ITERATIONS=parseInt(document.getElem entById("fractal_iteration_id").value);



for (var Re = -CPS; Re <= CPS; Re = Re + DELTA)

{ // Represents the Re-axis. Re is the real part of a complex c value.

next_c_value:

for (var Im = -CPS; Im <= CPS; Im = Im + DELTA)

{ // Represents the Im-axis. Im is the imaginary part of a complex c value.

if(document.getElementById("FractalsName _1").value=='Mandel')

{var Zre=0; var Zim=0;var Сre=Re; var Cim=Im;}

if(document.getElementById("FractalsName _1").value=='Julia')

{

var Zre=Re; var Zim=Im;var Сre=parseFloat(document.getElementById("i d_pFracJul").value); var Cim=parseFloat(document.getElementById("i d_qFracJul").value);

}



var attr={}; var exponentialSmoothingSum = 0; var iteration=0;

for (var iterationCount = 1; iterationCount <= MAX_ITERATIONS; iterationCount++)

{ var phi=0;

if(Zre>0)

{var phi=Math.atan(Zim/Zre);

}

if(Zre==0&&Zim==0){var phi=0;}

if(Zre<0&&Zim>0)

{var phi=Math.PI+Math.atan(Zim/Zre);

}

if(Zre<0&&Zim<0)

{var phi=(-1)*Math.PI+Math.atan(Zim/Zre);

}

var ModulZ=Math.sqrt(Zre*Zre+Zim*Zim);

var dP=parseFloat(document.getElementById("i d_dFracJul").value);

var phiRad=(dP*phi);

var SquareZre=Math.pow(ModulZ,dP)*(Math.cos(p hiRad));

var SquareZim=Math.pow(ModulZ,dP)*(Math.sin(p hiRad));

var ZaddRe=SquareZre+Сre;var ZaddIm=SquareZim+Cim;

if(document.getElementById("id_sFracJul" )&&document.getElementById("id_sFracJul" ).value!=="0")

{

if(document.getElementById("id_sFracJul" ).value=="Math.cotan")

{ZaddRe=1/Math.tan(ZaddRe); ZaddIm=1/Math.tan(ZaddIm);}

else{

ZaddRe=eval(document.getElementById("id_ sFracJul").value+"("+ZaddRe+")");ZaddIm=e val(document.getElementById("id_sFracJul" ).value+"("+ZaddIm+")");}

}

if(document.getElementById("id_sFracJul" )&&document.getElementById("id_s2FracJul" ).value!=="0")

{

if(document.getElementById("id_s2FracJul" ).value=="Math.cotan")

{ZaddRe2=1/Math.tan(ZaddRe); ZaddIm=1/Math.tan(ZaddIm);}

else{

ZaddRe2=eval(document.getElementById("id _s2FracJul").value+"("+ZaddRe+")");ZaddI m2=eval(document.getElementById("id_s2Fr acJul").value+"("+ZaddIm+")");}

}

if(document.getElementById("id_sFracJul" )&&document.getElementById("id_sFracJul" ).value!=="0"&&document.getElementById("i d_s2FracJul").value!=="0")

{

ZaddRe=ZaddRe*ZaddRe2;ZaddIm=ZaddIm*Zadd Im2;

}

if(document.getElementById("id_sFracJul" )&&document.getElementById("id_s3FracJul" ).value!=="0")

{ZaddRe=ZaddRe*ZaddRe;ZaddIm=ZaddIm*Zadd Im;}

Zre=ZaddRe;Zim=ZaddIm;

varZmodul=ZaddRe*ZaddRe+ZaddIm*ZaddRe;// mathematically correct expession should be like this: varZmodul=ZaddRe*ZaddRe+ZaddIm*ZaddIm, but also from a mathematical point of view, we can interrupt the iteration at any value so at this point in OpenWebGIS the iteration is terminated under the following condition . In this way, when the iterations are interrupt ed the fractals become much more interesting. Perhaps in future versions of OpenWebGIS user will be able to choose conditions by themselves .



iteration+=(Zre*Zre + Zim*Zim)



if (varZmodul> 4)

{continue next_c_value;}

}

attr.iterationValue=iteration;

if(iteration>MAX_ITERATIONS/4)

{

var PixelW=map.getPixelFromLonLat(new OpenLayers.LonLat(ext.right,ext.top));

var PixelH=map.getPixelFromLonLat(new OpenLayers.LonLat(ext.left,ext.bottom));



lat=((PixelH.y)*(2-Im))/4; // latitude of the point

lon=((PixelW.x)*(Re+2))/4; // longitude of the point



var lonlat=map.getLonLatFromPixel(new OpenLayers.Pixel(lon,lat));

var lon=lonlat.lon;

var lat=lonlat.lat;



var new_pos2=new OpenLayers.LonLat(lon,lat);



var new_pos22=new OpenLayers.LonLat(lon,lat).transform(map.g etProjectionObject(),new OpenLayers.Projection("EPSG:4326"));

attr.longitude=new_pos22.lon;

attr.latitude=new_pos22.lat;

yii.setSeconds(yii.getSeconds()+1);

var monthNN=yii.getMonth()+1;if(monthNN<10){m onthNN='0'+monthNN;}

var dayNN=yii.getDate(); if(dayNN<10){dayNN='0'+dayNN;}

var hoursNN=yii.getHours();if(hoursNN<10){ho ursNN='0'+hoursNN;}

var minNN=yii.getMinutes();if(minNN<10){minN N='0'+minNN;}

var secNN=yii.getSeconds();if(secNN<10){secN N='0'+secNN;}

var Datert2=yii.getFullYear()+"-"+monthNN+'- '+dayNN+'T'+hoursNN+':'+minNN+':'+secNN;

attr.Time=Datert2;

points=new OpenLayers.Geometry.Point(new_pos2.lon, new_pos2.lat);

var first_point= new OpenLayers.Feature.Vector(points);

first_point.attributes=attr;

ArrayFeatures.push(first_point);}

} // for

} // for



In order to select the type of a fractal and to set the parameters of the calculation you need to select the

OpenWebGIS menu "Calculations->Fractals" (See Figure 2).

Fractal Julia set is shown created

Zn+1=sin(Zn*Zn)

cos(Zn*Zn)

0.38+0.001*i

The decrease

the menu item "Edit-> Open attribute table" (see Figure 5)

Fractal Julia set is shown created using the formula

Zn+1=sin(Zn*Zn *Zn*Zn )

Zn*Zn* Zn*Zn

0.71+0.001*i

You can also create a three-dimensional image of a fractal using the charting module available in the menu item "Edit-> Open attribute table" (see Figure 7).

In the Figure 6,7

Fractal Julia set is shown, it was created using the formula : Zn+1=Zn*Zn, where Zn= 0.28+0.0113*i

Figure

Figure 7. The chart is turned with the help of buttons "X+", "X-", "Y+", "Y-", "Z+","Z-"





When calculating the fractal, the current center of the map extent is taken as the center of the fractal, and the boundaries of a fractal comply with the minimum and maximum coordinates of the current extent (View) of the map. The extent of the map defines the geographic boundaries of GIS mapping information in the data frame.

Let`s have a look at other fractals created with the help of OpenWebGIS. In Figure 8 Fractal Julia set is shown created using the formula: Zn+1=sin(Zn*Zn*Zn*Zn)

Zn

Zn

Zn

Zn, where

Zn= 0.71+0.001*i

Zn+1=tan(Zn*Zn *Zn*Zn *Zn*Zn *Zn )

sin(Zn*Zn* Zn*Zn *Zn*Zn

*Zn)* Zn*Zn* Zn*Zn *Zn*Zn *Zn

0.58+0.0003*i

(See Figure 11,12,13)

Zn+1=sin(Zn*Zn *Zn*Zn *Zn*Zn *Zn )

(Zn*Zn* Zn*Zn *Zn*Zn

*Zn)

0.71+0.001*i