Proj4js.readTransformed = true; //that's the behaviour for proj4js without the patch
                                //transformed features will not transformed a second time
/*
###########################################################################
start of Proj4js.transform
###########################################################################
*/
Proj4js.transform = function(source, dest, point)
{
    if (!source.readyToUse || !dest.readyToUse) {
        this.reportError("Proj4js initialization for "+source.srsCode+" not yet complete");
        return;
    }

    // This is the part to get the transformation working
    //  on transformed features if Proj4js.readTransformed==false
    //
    //                    vvvvvvvvvvvvvvvvvvvvvvvvvv
    if (point.transformed && Proj4js.readTransformed) {
      this.log("point already transformed");
      return;
    }

    // Workaround for Spherical Mercator
    if ((source.srsProjNumber =="900913" && dest.datumCode != "WGS84") ||
        (dest.srsProjNumber == "900913" && source.datumCode != "WGS84")) {
        var wgs84 = Proj4js.WGS84;
        this.transform(source, wgs84, point);
        point.transformed = false;
        source = wgs84;
    }

    // Transform source points to long/lat, if they aren't already.
    if ( source.projName=="longlat") {
        point.x *= Proj4js.common.D2R;  // convert degrees to radians
        point.y *= Proj4js.common.D2R;
    } else {
        if (source.to_meter) {
            point.x *= source.to_meter;
            point.y *= source.to_meter;
        }
        source.inverse(point); // Convert Cartesian to longlat
    }

    // Adjust for the prime meridian if necessary
    if (source.from_greenwich) {
        point.x += source.from_greenwich;
    }

    // Convert datums if needed, and if possible.
    point = this.datum_transform( source.datum, dest.datum, point );

    // Adjust for the prime meridian if necessary
    if (dest.from_greenwich) {
        point.x -= dest.from_greenwich;
    }

    if( dest.projName=="longlat" ) {
        // convert radians to decimal degrees
        point.x *= Proj4js.common.R2D;
        point.y *= Proj4js.common.R2D;
    } else  {               // else project
        dest.forward(point);
        if (dest.to_meter) {
            point.x /= dest.to_meter;
            point.y /= dest.to_meter;
        }
    }
    point.transformed = true;
    return point;
} // transform()
/*
###########################################################################
end of Proj4js.transform
###########################################################################
*/

