public BasicCoordinateTransform(CoordinateReferenceSystem srcCRS,
                CoordinateReferenceSystem tgtCRS) {
                this.srcCRS = srcCRS;
                this.tgtCRS = tgtCRS;

                // compute strategy for transformation at initialization time, to make transformation more efficient
                // this may include precomputing sets of parameters

                doInverseProjection = (srcCRS != null && srcCRS != CoordinateReferenceSystem.CS_GEO);
                doForwardProjection = (tgtCRS != null && tgtCRS != CoordinateReferenceSystem.CS_GEO);
                doDatumTransform = doInverseProjection && doForwardProjection && srcCRS.getDatum() != tgtCRS.getDatum();

                if (doDatumTransform) {

                        boolean isEllipsoidEqual = srcCRS.getDatum().getEllipsoid().isEqual(tgtCRS.getDatum().getEllipsoid());
                        if (!isEllipsoidEqual) {
                                transformViaGeocentric = true;
                        }
                        if (srcCRS.getDatum().hasTransformToWGS84()
                                || tgtCRS.getDatum().hasTransformToWGS84()) {
                                transformViaGeocentric = true;
                        }

                        if (transformViaGeocentric) {
                                srcGeoConv = new GeocentricConverter(srcCRS.getDatum().getEllipsoid());
                                tgtGeoConv = new GeocentricConverter(tgtCRS.getDatum().getEllipsoid());
                        }
                }
        }