Template:Xdev > Template:XsysGmap poly arrows dev

Template:XsysGmap poly arrows dev

    Indice (TOC)
    Nessuna testata
    /* ----------------------------------- parametri -------------------------------------------
    
    $polyline = $0 = [
                        -------  polyline 1  -------- 
                     { lat_lng: [         ---------------  le coordinate della polyline in ordine
                          {lat:'', lng:''}, -------------  latitudine e longitudine punto
                          {lat:'', lng:''}
                       ],
                       color: '';         ---------------  il colore della polyline : default='#AEB404'
                       arrow: true        ---------------  true -> polyline con le frecce; false -> polyline senza le frecce  
                     },
                       -------- polyline 2 ------------
                     { lat_lng: [
                          {lat:'', lng:''},
                          {lat:'', lng:''}
                       ],
                       color: '';
                       arrow: false
                     },
                     ....
                     ]
    
     ----------------------------------------------------------------------------------------- */
    
    var polyline = $0 ?? $polyline ?? {};
    
    <script>"
    
    var polylines = eval("..json.emit(polyline)..");
    
    GPolylineWithArrows = function( options ) {
        this.options = options;
        this.arrows = [];
    };
    
    GPolylineWithArrows.prototype = new google.maps.OverlayView();
    GPolylineWithArrows.prototype.onAdd = function() {
        this.polyline = new google.maps.Polyline({
            path: this.options.path,
            strokeColor: this.options.strokeColor,
            strokeWeight: this.options.strokeWeight,
            strokeOpacity: this.options.strokeOpacity
        });
        this.polyline.setMap( this.getMap() );
    };
    
    GPolylineWithArrows.prototype.onRemove = function() {
        for( var i=this.arrows.length; i>0; i-- ){
            this.arrows[i-1].setMap( null );
            delete this.arrows[i-1];
            this.arrows.length--;
        };
        this.polyline.setMap(null);
        delete this.polyline;
    };
    
    GPolylineWithArrows.prototype.draw = function() {
    /*   alert('arrows.length: '+this.arrows.length+'; path.length: '+this.options.path.length); */
       for( var i=this.arrows.length; i>0; i-- ){
         this.arrows[i-1].setMap( null );
         delete this.arrows[i-1];
         this.arrows.length--;
       };
       var prj = this.getProjection(), middle;
       for( var i=1; i<this.options.path.length; i++ ){
           var p1 = prj.fromLatLngToContainerPixel( this.options.path[i] ),
           p0 = prj.fromLatLngToContainerPixel( this.options.path[i-1] ),
           vector = new google.maps.Point( p1.x - p0.x, p1.y - p0.y ),
           length = Math.sqrt( vector.x * vector.x + vector.y * vector.y ),
           normal = new google.maps.Point( vector.x/length, vector.y/length );
     
           if( length>this.options.arrowSize ){
             if( this.options.middleArrow ) middle = new google.maps.Point( (p1.x + p0.x)/2, (p1.y + p0.y)/2 );
             else middle = p1;
             var offsetMiddle = new google.maps.Point( normal.x*this.options.arrowSize, normal.y*this.options.arrowSize ),
             arrowPart1 = new google.maps.Point( -offsetMiddle.y*0.4, offsetMiddle.x*0.4 ),
             arrowPart2 = new google.maps.Point( offsetMiddle.y*0.4, -offsetMiddle.x*0.4 ),
             arrowPoint1 = new google.maps.Point( middle.x - offsetMiddle.x + arrowPart1.x, middle.y - offsetMiddle.y + arrowPart1.y ),
             arrowPoint2 = new google.maps.Point( middle.x - offsetMiddle.x + arrowPart2.x, middle.y - offsetMiddle.y + arrowPart2.y );
    
             this.arrows[i-1] = new google.maps.Polygon({
               map: this.getMap(),
               path: [
                 prj.fromContainerPixelToLatLng(middle),
                 prj.fromContainerPixelToLatLng(arrowPoint1),
                 prj.fromContainerPixelToLatLng(arrowPoint2)
               ],
               fillColor: this.options.fillColor ? this.options.fillColor : this.options.strokeColor,
               fillOpacity: this.options.fillOpacity ? this.options.fillOpacity : this.options.strokeOpacity,
               strokeColor: this.options.arrowStrokeColor ? this.options.arrowStrokeColor : this.options.strokeColor,
               strokeOpacity: this.options.arrowStrokeOpacity ? this.options.arrowStrokeOpacity : this.options.strokeOpacity,
               strokeWeight: this.options.arrowStrokeWeight ? this.options.arrowStrokeWeight : this.options.strokeWeight
             });
           };
       };
    }; 
    
    /* -------------------------------------------------------------------------------- */
    var flightPath;
    if(polylines.length > 0){
      flightPath = new Array(polylines.length);
      for ( var i=0; i<polylines.length; i++ ){
        if(polylines[i].lat_lng.length > 1){
          var pol = new Array(polylines[i].lat_lng.length);
          for (var j=0; j<polylines[i].lat_lng.length; j++  )
            pol[j] = new google.maps.LatLng(polylines[i].lat_lng[j].lat, polylines[i].lat_lng[j].lng);
          var color = '#AEB404';
          if(polylines[i].color.length > 0)
            color = polylines[i].color;
          if(polylines[i].arrow)
            flightPath[i] = new GPolylineWithArrows({
                path: pol,
                strokeColor: color,
                strokeOpacity: 1,
                strokeWeight: 2,
                arrowStrokeColor: color,
                arrowStrokeOpacity: 1,
                arrowStrokeWeight: 1,
                fillColor: color,
                fillOpacity: 1,
                arrowSize: 10
            });
          else
            flightPath[i] = new google.maps.Polyline({         
                path: pol,
                strokeColor: color,
                strokeOpacity: 1.0,
                strokeWeight: 2
            });
        };
      };  
    };
    
    if(flightPath.length > 0)
    google.maps.event.addDomListener(window, 'load', function(){
      initialize();
      for(var i=0; i<flightPath.length; i++)
        flightPath[i].setMap(map);  
    });
    
    /*$(document).ready(function(){
      for(var i=0; i<flightPath.length; i++)
        flightPath[i].setMap(map);
    });*/
    
    "</script>
    
    Centro Internazionale di Studi Primo Levi - Tutti i diritti riservati
    Powered by MindTouch Core