<?xml version="1.0" encoding="UTF-8" ?>
<Module>

  <ModulePrefs title="Umbiculus Urbis reloaded" 
             description="For more than thousand years, the Umbiculus Urbis in Rome was the navel of the world, the start point of the road mileage of the Roman Empire. The WatchRose(c) www.watchrose.com allows the rebirth and worldwide cumulation of this methode."
             author="Henrique Koehler"
             author_email="volksnav@volksnav.de"
             screenshot= "http://www.volksnav.de/mapplet/UmbiculusUrbisSnapshot.jpg" 
             thumbnail="http://www.volksnav.de/mapplet/tn_UmbiculusUrbis.jpg"  
             height="150">

    <Require feature="sharedmap" />
    <Require feature="setprefs" />
  </ModulePrefs>
  
<UserPref  name="zoomState"   default_value="8"  datatype="hidden"/>

  <Content type="html">  <![CDATA[

    <script>

       var div1 = document.createElement('DIV');
       div1.innerHTML = '<h4>The Umbiculus Urbis could be (again) the pole "m0"<br>of a monopolar orientation system</h4>';

     kenn="WatchRose(c)"
      var poleLatGrad = 41;  var poleLatMin = 53; var poleLatSek = 34;
      var poleLonGrad = 12;  var poleLonMin = 29;  var poleLonSek = 5;
 
      var poleLat=Math.abs(poleLatGrad) + poleLatMin / 60 + poleLatSek / 3600;
          if (poleLatGrad < 0 ) {poleLat = -poleLat};
      var poleLon= Math.abs(poleLonGrad) + poleLonMin / 60 + poleLonSek / 3600;
          if (poleLonGrad < 0) {poleLon = - poleLon}
       var map = new GMap2();
       var position_marker = null;

      var centro = new GLatLng(poleLat, poleLon);
      map.setCenter(centro, 5);

      var marker = new GMarker(centro);
      map.addOverlay(marker)


        showTabs();

     var prefs = new _IG_Prefs(__MODULE_ID__);
     var message = document.getElementById("message");
 
  GEvent.addListener(map, "click", showPosition);

     function resetCounter(){
       prefs.set("zoomState = ", 0);
       map.clearOverlays();
         zoom=7       
         drawGrid();
     }

     function incrementZoom() {
       var zoomState = prefs.getInt("zoomState");
       prefs.set("zoomState", zoomState + 1);

          map.clearOverlays();
          zoom=5
          drawGrid();
      }

function drawGrid () {

         var cosR =  Math.sin(poleLat*Math.atan(1) / 45)*Math.sin(poleLat * Math.atan(1) / 45) + Math.cos(poleLat*Math.atan(1) / 45)*Math.cos(poleLat * Math.atan(1) / 45) * Math.cos(( Math.atan(1) / 45));
         map.setCenter(centro, zoom);
  var polyOptions = {geodesic:true};

           var points = [];
        for (var k = 1; k < 3; k++) {
 
         if(zoom < 6) {  var fator= 250  }//zoom/2.2  
         else {var fator=150} 

           var Ry = fator * 0.009 * k 
           var Rx = fator * k / (Math.round(10*(Math.atan(-cosR / Math.sqrt(-cosR * cosR + 1)) + 2 * Math.atan(1))  * 45 * 111.18/ Math.atan(1) )/10) ;

           for (var i = 0; i < 73; i++) {
 
             var winkel= 360/72*Math.PI*i/180;
             var WoLat = poleLat + Ry * Math.cos(winkel);
             var WoLon = poleLon + Rx * Math.sin(winkel);
  
             points.push(new GLatLng(WoLat ,WoLon ));
           }
        }      // var k

//    map.addOverlay(new GPolyline(points, "#ff0000", 2, 0.7,polyOptions));
    map.addOverlay(new GPolyline(points, "#ff0000", 2, 0.7));

   var radioy = fator * 0.009*3
   var radiox = fator *3 / (Math.round(10*(Math.atan(-cosR / Math.sqrt(-cosR * cosR + 1)) + 2 * Math.atan(1))  * 45 * 111.18/ Math.atan(1) )/10) ;
 
   var polyline = new GPolyline([ new GLatLng(poleLat , poleLon),  new GLatLng(poleLat+radioy, poleLon) ], "#ff0000", 1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([ new GLatLng(poleLat , poleLon),  new GLatLng(poleLat-radioy, poleLon) ], "#ff0000", 1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat , poleLon ), new GLatLng(poleLat + Math.sqrt(3)*radioy/2, poleLon + radiox/2) ], "#ff0000", 1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat , poleLon ), new GLatLng(poleLat - Math.sqrt(3)*radioy/2, poleLon - radiox/2) ], "#ff0000", 1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([ new GLatLng(poleLat , poleLon ),new GLatLng(poleLat + radioy/2, poleLon + radiox*0.866) ], "#ff0000", 1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([ new GLatLng(poleLat , poleLon ),new GLatLng(poleLat - radioy/2, poleLon - radiox*0.866) ], "#ff0000", 1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat , poleLon ),new GLatLng(poleLat, poleLon+radiox)], "#ff0000", 1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat , poleLon ),new GLatLng(poleLat, poleLon-radiox)], "#ff0000", 1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat , poleLon ),new GLatLng(poleLat+radioy/2 , poleLon - radiox*.866)], "#ff0000",1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat , poleLon ),new GLatLng(poleLat-radioy/2 , poleLon + radiox*.866)], "#ff0000",1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat , poleLon ),new GLatLng(poleLat+radioy*.866 , poleLon - radiox*.5)], "#ff0000", 1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat , poleLon ),new GLatLng(poleLat-radioy*.866 , poleLon + radiox*.5)], "#ff0000", 1, 1,polyOptions);   map.addOverlay(polyline);

   var polyline = new GPolyline([ new GLatLng(poleLat+ .96*radioy, poleLon+radiox*.5/3),new GLatLng(poleLat + Math.sqrt(3)*radioy/2/3, poleLon + radiox/2/3)   ], "#0000ff", 1, 1,polyOptions);   map.addOverlay(polyline);
   var polyline = new GPolyline([ new GLatLng(poleLat+ .92*radioy, poleLon+radiox/3),new GLatLng(poleLat + Math.sqrt(3)*radioy/3, poleLon + radiox/3)   ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([ new GLatLng(poleLat - .96 *radioy, poleLon-radiox*.5/3),new GLatLng(poleLat - Math.sqrt(3)*radioy/2/3, poleLon - radiox/2/3)   ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([ new GLatLng(poleLat - .92 *radioy, poleLon-radiox/3),new GLatLng(poleLat - Math.sqrt(3)*radioy/3, poleLon - radiox/3)   ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat-radioy/6, poleLon+radiox*.866/3),new GLatLng(poleLat-radioy/6 , poleLon + radiox*.96)], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat-radioy/3, poleLon+radiox*.866*2/3),new GLatLng(poleLat-radioy/3 , poleLon + radiox*.92)], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat+radioy/6, poleLon-radiox*.866/3),new GLatLng(poleLat+radioy/6 , poleLon - radiox*.96)], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat+radioy/3, poleLon-radiox*.866*2/3),new GLatLng(poleLat+radioy/3 , poleLon - radiox*.92)], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([ new GLatLng(poleLat+ radioy/6, poleLon+radiox*.866/3),new GLatLng(poleLat + .76 * radioy, poleLon + radiox * 0.64) ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([ new GLatLng(poleLat+ radioy/3, poleLon+radiox*2*.866/3),new GLatLng(poleLat + .65 * radioy, poleLon + radiox*0.77) ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([ new GLatLng(poleLat- radioy/6, poleLon-radiox*.866/3),new GLatLng(poleLat - .76 *radioy, poleLon - radiox*0.64) ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([ new GLatLng(poleLat- radioy/3, poleLon-radiox*2*.866/3),new GLatLng(poleLat - .65 * radioy, poleLon - radiox*0.77) ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat, poleLon+radiox/3),new GLatLng(poleLat + radioy*.35, poleLon + radiox*.92) ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat, poleLon+ 2* radiox / 3),new GLatLng(poleLat + radioy*.17, poleLon + radiox*.97) ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat, poleLon - radiox/3),new GLatLng(poleLat - radioy*.35, poleLon - radiox*.93) ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat, poleLon - 2* radiox / 3),new GLatLng(poleLat - radioy*.17, poleLon - radiox*.97) ], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat-radioy*.866/3, poleLon + radiox/6),new GLatLng(poleLat-radioy*.64 , poleLon + .76* radiox)], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat-radioy*2*.866/3, poleLon + radiox/3),new GLatLng(poleLat-radioy*.77 , poleLon + .65 * radiox)], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat+radioy*.866/3, poleLon - radiox/6),new GLatLng(poleLat+radioy*.64 , poleLon -  .76 * radiox )], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat+radioy*2*.866/3, poleLon - radiox/3),new GLatLng(poleLat+radioy*.77 , poleLon - .65 * radiox )], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat-radioy/3, poleLon),new GLatLng(poleLat-radioy*.93 , poleLon+radiox*.35)], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat-radioy*2/3, poleLon),new GLatLng(poleLat-radioy*.97 , poleLon+radiox*.17)], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat+radioy/3, poleLon),new GLatLng(poleLat+radioy * .93 , poleLon - radiox*.35)], "#0000ff", 1, 1);   map.addOverlay(polyline);
   var polyline = new GPolyline([new GLatLng(poleLat+radioy*2/3, poleLon),new GLatLng(poleLat+radioy * .97 , poleLon - radiox*.17)], "#0000ff", 1, 1);   map.addOverlay(polyline);

  var points = [];
  var i=0;  points.push(new GLatLng(poleLat - radioy * .287, poleLon - radiox * .166));
      i=1 ; points.push(new GLatLng(poleLat - radioy *.44, poleLon - radiox *.255));
      i=2;points.push(new GLatLng(poleLat - radioy *.42, poleLon - radiox *.3));
      i=3 ; points.push(new GLatLng(poleLat - radioy *.397, poleLon - radiox *.33));
      i=4;points.push(new GLatLng(poleLat - radioy *.38, poleLon - radiox *.35));
      i=5; points.push(new GLatLng(poleLat - radioy * .33, poleLon - radiox * .385));
      i=6;  points.push(new GLatLng(poleLat - radioy * .167, poleLon - radiox * .29));
      i=7;points.push(new GLatLng(poleLat - radioy *.208, poleLon - radiox *.26));
      i=8;  points.push(new GLatLng(poleLat - radioy * .23, poleLon - radiox * .242));
      i=9;points.push(new GLatLng(poleLat - radioy *.266, poleLon - radiox *.2));
  points.push(points[0]);   

  map.addOverlay(new GPolygon(points, "#ff0000", 0, 0.7, "#000fff", 0.2));

   var tinyIcon = new GIcon();

  if (zoom < 6) { tinyIcon.image = "http://www.volksnav.de/mapplet/r250.ico";}
  else  { tinyIcon.image = "http://www.volksnav.de/mapplet/r150.ico";}

   tinyIcon.iconSize = new GSize(25, 25);
   tinyIcon.iconAnchor = new GPoint(10, 10);

    var winkelR= 15*Math.PI/180;
    var WoLatR = poleLat - Ry * Math.cos(winkelR)/2;
    var WoLonR = poleLon - Rx * Math.sin(winkelR)/2;
    var pontoR = new GLatLng(WoLatR,WoLonR);

   map.addOverlay(new GMarker(pontoR, {icon:tinyIcon}));

   if(zoom < 6) {tinyIcon.image = "http://www.volksnav.de/mapplet/M125.ico";}
   else {tinyIcon.image = "http://www.volksnav.de/mapplet/M75.ico";}
   
    tinyIcon.iconSize = new GSize(25, 25);
   tinyIcon.iconAnchor = new GPoint(10, 10);

    var WoLatM = poleLat - Ry /1.3;
    var WoLonM = poleLon - Rx /4;
    var pontoM = new GLatLng(WoLatM,WoLonM);

   map.addOverlay(new GMarker(pontoM, {icon:tinyIcon}));

  }  // function drawGrid


function showTabs(){
       var div2 = document.createElement('DIV');
       div2.innerHTML = '<h4>Logical position codes for towns, crossings, road exits etc.<br>like "WatchRose(c) m2:8 r22" base on this point</h4>';
       var div3 = document.createElement('DIV');
       div3.innerHTML = '<h4>"m12" is the direction from "m0" through north, "m3" to<br>east, etc. This divides the globe into 12 "hour" petals</h4>';
       var div4 = document.createElement('DIV');
       div4.innerHTML = '<h4>The m-petals are divided in "distance-minutes".<br>"m4:7" is 7 km "later" than "m4"</h4>';
       var div5 = document.createElement('DIV');
       div5.innerHTML = '<h4>The radius is the distance to "m0" in steps of<br>1 km.   "r13" means "13km from m0"</h4>';

       var tab1 = new GInfoWindowTab('pole', div1);
       var tab2 = new GInfoWindowTab('codes', div2);
       var tab3 = new GInfoWindowTab('hour/petal', div3);
       var tab4 = new GInfoWindowTab('minutes', div4);
       var tab5 = new GInfoWindowTab('radius', div5);

       map.openInfoWindowTabs(centro, [tab1, tab2,tab3, tab4, tab5])
}

function showPosition(marker, point) {

    if (typeof(point) == "undefined" || point == null) {
      return;
    }
    if (position_marker != null) {
      map.removeOverlay(position_marker);
    }
        position_marker = new GMarker(point);

    var latitude = point.lat().toString();  
    var longitude = point.lng().toString(); 

    var url = "http://www.volksnav.de/UmbiculusUrbis?lat="+ point.lat().toString() + "&lon=" + point.lng().toString();     
 
        _IG_FetchContent(url,function(callback) {
              map.openInfoWindowHtml(point, callback)
        });

         map.addOverlay(position_marker);

}   

    </script>
Click anywhere to know the global metrical position code WatchRose(c) of that point.<br/n> 
<font size=-1><br/n>
The Munich Orientation Convention quantifies positions in harmony with 
imagination power, cartography, navigation devices and codes for 
crossings, stations, bus stops, bridges, road exits, tunnels etc. The index on map is at the 
same time an intelligent postal code on reality!<br><br/n>After some clicks on map
 on different zoom levels, click here and see a metric global search 
grid. The grid also shows a very special quad with 125 x 125 (or 75 x 75) km on sector m7. Like 
parabolic antennas, its bended sides "point" to the global pole. 
        <input type=button value="show grid with r250/r500" onClick="incrementZoom();">
        <input type=button value="r150/r300" onClick="resetCounter();">
        <div id="message" style="margin-top:1em"></span>
         <hr>
copyright 2009 WatchRose(c)  <a href="mailto:volksnav@volksnav.de">Henrique Koehler</a></font>


  ]]>
  </Content>
</Module>