You are here: > ESRI Forums > mapobjects users on-line discussion forums > Thread Replies

MapObjects Users On-Line Discussion Forums

MapObjects -Java Edition forum

Coordinate Transformation Lat/Long -> Lambe...   Jack Forestman Aug 05, 2002
Re: Coordinate Transformation Lat/Long -> L...   Melita Kennedy Aug 05, 2002
Re: Coordinate Transformation Lat/Long -> L...   Nicolas FAGART Aug 09, 2002
Report Inappropriate Content • Top • Print • This Forum is closed for replies.    
Subject Coordinate Transformation Lat/Long -> Lambert (URGEND!!) 
Author Jack Forestman 
Date Aug 05, 2002 
Message I have to write a coordinate transformation function, which transforms Coordinates from the Lonitude/Latitude system to the Lambert system (new).

Does somebody can give me a URL where I can get some kind of Sourcecode or maybe Pseudo Sourcecode, becasue I want to integrate it in my software. Does somebody already has developed something. Unfortunelty I don't have time to work out the mathematical model and develop it by my own... :(

Does somebody know a discussion forum, where I can ask general question like this one. Maybe it does not fit to MO at all.

Thanks in advance!

Jack 
   
Report Inappropriate Content • Top • Print • This Forum is closed for replies.    
Subject Re: Coordinate Transformation Lat/Long -> Lambert (URGEND!!) 
Author Melita Kennedy 
Date Aug 05, 2002 
Message Try http://www.remotesensing.org/proj/ which has C source code. It also has links at the bottom of the page for other projection-related source code.
 
  Melita Kennedy
ESRI Product Specialist 
   
Report Inappropriate Content • Top • Print • This Forum is closed for replies.    
Subject Re: Coordinate Transformation Lat/Long -> Lambert (URGEND!!) 
Author Nicolas FAGART 
Date Aug 09, 2002 
Message Hi,
I had the same problem in order to transform a GPS position (WGS84) into French Lambert coordinates (Lambert II étendu).
I've developped a driver for GPS but I havn't found in MapObject the good classes for transformation into "Lambert II étendu".

But I've found a class library whitch do that on : http://www.ai.sri.com/geotransform/

I've encapsulated this library for use it with "Lambert II étendu".

Here is the code of my class.
This class use the geotransform library witch is downloadable on http://www.ai.sri.com/geotransform/
But I've adapted it in the attached jar.
 
 
package com.esrifrance.geotransform;

import com.esrifrance.geotransform.transforms.Gdc_To_Lambert_Converter;
import com.esrifrance.geotransform.transforms.Lambert_To_Gdc_Converter;
import com.esrifrance.geotransform.ellipsoids.Ellipsoid;
import com.esrifrance.geotransform.ellipsoids.CD_Ellipsoid;
import com.esrifrance.geotransform.coords.Gdc_Coord_3d;
import com.esrifrance.geotransform.coords.Lambert_Coord_3d;
import com.esrifrance.geotransform.coords.Gcc_Coord_3d;
import com.esrifrance.geotransform.transforms.Gdc_To_Gcc_Converter;
import com.esrifrance.geotransform.ellipsoids.WE_Ellipsoid;
import com.esrifrance.geotransform.transforms.Gcc_To_Gdc_Converter;
//import com.esrifrance.transforms.Gdc_To_Gcc_Converter;

/**
 * Classe utilitaire permettant de réaliser des transformation de coordonnées à travers différents systèmes de projection.
 * Pour l'instant, cette classe ne fait que des transformation de coordonnées GPS (coordonnées géographiques dans le système WGS84) vers des coordonnées Lambert II étendues (coordonnées catrésiennes dans le Système NTF).
 * Cette classe est un singleton, on y accède via la méthode statique getInstance().
 * Actuellement cette classe s'appuie sur la librairie geotransform.
 * 
 * @version 1.0
 * @since 1.0 
 * @author Armel Ouedraogo
 * @author Nicolas Fagart
 */
public class GeoTransform {

    // Transformateur Géographique => géocentrique dans le système WGS84
    private Gdc_To_Gcc_Converter gdcToGccConverter;
    private Ellipsoid ellipsoidWGS84;

    // Vecteur de Translation WGS => NTF:
    private Gcc_Coord_3d translationWgsNtf = new Gcc_Coord_3d(+168, +60, -320);

    // Transformateur Géocentrique => Géographique dans le système NTF
    private Gcc_To_Gdc_Converter gccToGdcConverter;
    private Ellipsoid ellipsoidClarke1880;

    // Projection Lambert :
    // Transformation Géographique => Plane (Lambert II) toujours dans le système NTF
    private Gdc_To_Lambert_Converter gcdToLambertConverter;

    private boolean initialise;

    /**
     * @supplierCardinality 1 
     */
    private static GeoTransform instance;

    /**
     * Méthode d'initialisation a appeler obligatoirement au moins une fois
     * avant toute conversion.
     */
    public void init() {

        // 1. Transformateur Géographique => géocentrique dans le système WGS84
        gdcToGccConverter = new Gdc_To_Gcc_Converter();
        ellipsoidWGS84 = new WE_Ellipsoid();
        gdcToGccConverter.Init(ellipsoidWGS84);

        // 3. Transformation Géocentrique => Géographique dans le système NTF
        gccToGdcConverter = new Gcc_To_Gdc_Converter();
        ellipsoidClarke1880 = new CD_Ellipsoid();
        gccToGdcConverter.Init(ellipsoidClarke1880);

        // 4. Projection Lambert :
        // Transformation Géographique => Plane (Lambert II) toujours dans le système NTF
        gcdToLambertConverter = new Gdc_To_Lambert_Converter();
        gcdToLambertConverter.Init(ellipsoidClarke1880);

        initialise = true;
    }

    /**
     * Convertit des coordonnées Latitude, Longitude, élevation du GPS (WGS84)
     * vers des coordonnées cartésiennes Lambert II Etendu.
     * @param Coordonnées Géographiques (latitude, longitude et élevation) du GPS en entrée
     * @return Coordonnées Lambert (E,N,H, : Easting , Northing, Hauteur + Hémisphère) dans le système NTF (France)
     */
    public Lambert_Coord_3d transformGpsToLambert( Gdc_Coord_3d gdcCoordGPS ) {

        // Initialisation des Ellipsoïdes et convertisseurs:
        if (! initialise) init();

        // Coordonnées Géographiques (lat,long,elev)  GPS dans le système WGS84
        // Gdc_Coord_3d gdcCoordGPS = new Gdc_Coord_3d(latitude, longitude, elevation);

        // Coordonnées Géocentriques X,Y,Z (origine au centre de la Terre) dans le système WGS84
        Gcc_Coord_3d gcc_coord = new Gcc_Coord_3d();

        // Coordonnées Géographiques (lat,long,elev) dans le système NTF (France)
        Gdc_Coord_3d finalGdc_coord = new Gdc_Coord_3d();

        // Coordonnées Lambert (E,N,H : Easting , Northing, Hauteur) dans le système NTF (France)
        Lambert_Coord_3d coorLambert = new Lambert_Coord_3d();

        // 1. Transformation Géographique => géocentrique dans le système WGS84.
        gdcToGccConverter.Convert(gdcCoordGPS, gcc_coord);

        // 2.(passage Système WGS84 vers Système NTF)
        // Dans le cas général, il s'agit d'une transformation par une
        // similitude à 7 paramètres.
        // Mais cela correspond quasiment dans notre cas (WGS84 => NTF) à
        //une simple translation d'un vecteur (+168, +60, -320);
        gcc_coord.deplace(translationWgsNtf);

        // 3. Transformation Géocentrique => Géographique dans le système NTF
        gccToGdcConverter.Convert(gcc_coord, finalGdc_coord);


        // 4. Projection Lambert :
        // Transformation Géographique => Plane (Lambert II) toujours dans le système NTF
        gcdToLambertConverter.Convert(finalGdc_coord, coorLambert);

		return coorLambert;
	}


/**
 * Permet de récupérer l'unique instance du GeoTransform
 */
    public static GeoTransform getInstance() {
        if (instance != null)
	        return instance;

        instance = new GeoTransform();
        instance.init();
        return instance;
    }
}
 
  esrifrance_geotransform.jar (opens in new window)