function Poligono() {
    this.clickable = true;      // boolean Indicates whether this Polygon handles mouse events. Defaults to true.
    this.editable = true;       // boolean If set to true, the user can edit this shape by dragging the control points
    //                                     shown at the vertices and on each segment. Defaults to false.
    this.fillColor = "";        // string The fill color. All CSS3 colors are supported except for extended named colors.
    this.fillOpacity = 0;       // number The fill opacity between 0.0 and 1.0
    this.geodesic = true;       // boolean When true, render each edge as a geodesic (a segment of a "great circle").
    //                                     A geodesic is the shortest path between two points along the surface of the Earth.
    //                                     When false, render each edge as a straight line on screen. Defaults to false.
    this.map = true;            // Map Map on which to display Polygon.
    this.paths = [];            // MVCArray.<MVCArray.<LatLng>>|MVCArray.<LatLng>|Array.<Array.<LatLng>>|Array.<LatLng>
    //                                     The ordered sequence of coordinates that designates a closed loop. Unlike polylines,
    //                                     a polygon may consist of one or more paths. As a result, the paths property may specify
    //                                     one or more arrays of LatLng coordinates. Paths are closed automatically;
    //                                     do not repeat the first vertex of the path as the last vertex.
    //                                     Simple polygons may be defined using a single array of LatLngs.
    //                                     More complex polygons may specify an array of arrays.
    //                                     Any simple arrays are converted into MVCArrays.
    //                                     Inserting or removing LatLngs from the MVCArray will automatically update the polygon on the map.
    this.strokeColor = true;    // string The stroke color. All CSS3 colors are supported except for extended named colors.
    this.strokeOpacity = 0;     // number The stroke opacity between 0.0 and 1.0
    this.strokePosition = {};   // StrokePosition The stroke position. Defaults to CENTER. This property is not supported
    //                                     on Internet Explorer 8 and earlier.
    this.strokeWeight = 0;      // number The stroke width in pixels.
    this.visible = true;        // boolean Whether this polygon is visible on the map. Defaults to true.
    this.zIndex = 0;            // number The zIndex compared to other polys.
}

function PoligonoTerminal(o) {
    this.fillOpacity = 0.4;
    this.fillColor = "#FF0000";
    this.strokeOpacity = 1.0;
    this.strokeWeight = 1.0;
    this.zIndex = 1;
    this.paths = o.pontos;
}

PoligonoTerminal.prototype = Poligono;

function PoligonoPontoOnibus(o) {
    this.fillOpacity = 0.4;
    this.fillColor = "#E8E819";
    this.strokeOpacity = 1.0;
    this.strokeWeight = 1.0;
    this.zIndex = 1;
    this.paths = o.pontos;
}

PoligonoPontoOnibus.prototype = Poligono;

function CriarPoligono(options) {
    return new google.maps.Polygon(options);
}