Here is my suggestion for handling ellipsoid issues:

If the implementer of the transformation interface needs to move from
a target spatial reference system that does not use the ellipsoid of
the pivot spatial reference system we provide a helper class called
something like SevenParameterEllipsoid transformation that he can use
in his implementation internally. We could even create some built-in
parameters for common ellipsoids.

I still think the performance cost necessary for use of a common
ellipsoid as part of the "pivot" spatial reference system is worth the
simplicity it allows. But maybe I am wrong on this issue.

If I am incorrect, would we need to add an elliopsoid parameter to our
translation methods?

SS
On 9/10/07, Stefan Steiniger <[EMAIL PROTECTED]> wrote:
>
> > ... but geodesy is a bit more complicated than converting feet to
> > meters, and converting a coordinate to the central wgs84 may be a waste
> > of energy if you just wante to change the projection but stay in your
> > local datum (in this case, your local datum with your local ellipsoid
> > should be used as the pivot, and coordinates should just be converted to
> > this system then reprojected in the new projection.
>
> right.. so we need to be aware that we do not convert if the ellipsoid
> stays the same - on the other hand.. it is just "some math".. and if
> avoid rounding, then things should be the same for dx=(0,0,0)
>
> stefan
>
> > Michael
> >
> >> Let's use another analogy that may help:
> >>
> >> We want to write a simple interface that transforms monetary amounts
> >> in different currencies. Would you try to create a group of classes
> >> and interfaces that transform directly from any one currency to any
> >> other currency? Absolutely not! A much simpler system would result if
> >> you chose an "in-between" currency. You would want to choose a common
> >> currency like US Dollars or the Euro. Then your interface would look
> >> something like this:
> >>
> >> public interface transformCurrency
> >> {
> >>
> >> public double getAmountInUSDollars(double argAmountInLocalCurrency);
> >>
> >> public doube getAmountInLocalCurrency(double argAmountInUSDollars);
> >>
> >> }
> >>
> >> I think this "in-between" coordinate system should be a spherical
> >> coordinate system that doesn't involve projections and uses an
> >> ellipsoid that fits the Earth's overall surface well. To me this
> >> spatial reference system would be WGS-84, but there might be others
> >> that work.
> >>
> >> I have attached the interface I am currently using. I think we can
> >> merge it with Paul's interface to come up with something simple that
> >> meets all of our needs.
> >>
> >> The Sunburned Surveyor
> >>
> >>
> >>
> >>
> >>
> >> On 9/8/07, Stefan Steiniger <[EMAIL PROTECTED]> wrote:
> >>
> >>
> >>> I got used to use North and East (instead x,y which is turned in geodesy
> >>> and math and latlon which is purely geographic)
> >>>
> >>> so what about getNorthCoord and getEastCoord?
> >>> Usually one speakes also from False Easting (and Northing) for the bias
> >>> of the origin point.
> >>>
> >>> i will read the rest of your emails later
> >>>
> >>> stefan
> >>>
> >>> Michaël Michaud schrieb:
> >>>
> >>>
> >>>> Hi Paul
> >>>>
> >>>>
> >>>>
> >>>>> 1. The reason I chose not to use an array of doubles as a parameter as
> >>>>> an argument or return type is that what order do you pass in the
> >>>>> parameters is it lon, lat or lat, lon for geographics.
> >>>>>
> >>>>>
> >>>>>
> >>>> I'm not sure how getX, getY avoid the confusion.
> >>>> IMHO, coordinate order is relative to the coordinate system definition
> >>>> (source crs and target crs may have different order), and should not be
> >>>> fixed in the coordinate operation interface (how do you use setX, setY,
> >>>> getX, getY to convert, say a geo lat/lon coordinate system to a geo
> >>>> lon/lat coordinate system ?)
> >>>>
> >>>>
> >>>>
> >>>>> I did consider
> >>>>> having getLat/getLon but that would be even more confusing.
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>> Agree. These methods are ok for classes implementing coordinate
> >>>> operation and expressing transformations from any coord ref sys to a
> >>>> geographic coodinate reference system, but not in the general case.
> >>>>
> >>>>
> >>>>
> >>>>> In respect to using Coordinate this is a low level API not intended to
> >>>>> be use by mere mortals so I went with memory efficiency over ease of
> >>>>> use. I guess I just negated my argument to using double[] as that fits
> >>>>> the mold of a low level API.
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>> Sorry, I'm not sure I understood this point. Do you mean that for a low
> >>>> level API, you should have considered double[] as well as getX, getY ?
> >>>>
> >>>>
> >>>>
> >>>>> 2. I'm flexible with the name CoordinateOperation could be fine.
> >>>>>
> >>>>> 3. 3D coordinates are supported, just at a higher level than the actual
> >>>>> projection, as the z value is not projected the projection does not need
> >>>>> to know about it. The library to do JTS conversions would need to make
> >>>>> sure the z and any other ordinate values are copied to the resulting
> >>>>> geometry.
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>> That's right for projection (mathematical transformation from geographic
> >>>> coordinates to projected coordinates), but not for general coordinate
> >>>> transformations like lat/lon/height to easting/northing/altitude where
> >>>> altitude is determined using lat, lon and a geoid model. Coordinate
> >>>> transformations include also transformation from geographic
> >>>> (lat/lon/height) to 3D geocentric system and geocentric to geographic.
> >>>>
> >>>>
> >>>>
> >>>>> Landon brought up a good point about forward v.s. reverse
> >>>>> transformations, I have it setup so that I support a forward and reverse
> >>>>> methods, their could be an argument that there would only be one
> >>>>> double[] transform(double[]) operation and have separate Classes for the
> >>>>> forward v.s. reverse transformation.
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>> Yes, I'm not sure what is the better way for inverse transformation.
> >>>> Inverse transformation may use :
> >>>> - the same parameters as the direct transformation but with opposite 
> >>>> signs
> >>>> - the same algorithm but with different parameters
> >>>> - a different algorithm (ex. geographic 2 projected, projected 2 
> >>>> geographic)
> >>>>
> >>>> May be direct and inverse operations must be implemented in separate
> >>>> classes in the genarl case as you suggest, and eventually, some special
> >>>> implementation of coordinate operation may have a "invertible" property
> >>>> to be able to do the inverse transformation without  creating a new
> >>>> coordinate operation instance (for ex, prime meridian change).
> >>>>
> >>>> Michael
> >>>>
> >>>>
> >>>>
> >>>>> Paul
> >>>>>
> >>>>> Michaël Michaud wrote:
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>> Hi Paul,
> >>>>>>
> >>>>>> I have some questions and remarks about your proposition :
> >>>>>>
> >>>>>> 1 - why do you use a setX setY method in the interface instead of
> >>>>>> something like
> >>>>>> Coordinate transform(Coordinate)
> >>>>>> Coordinate inverseTransform(Coordinate)
> >>>>>> or
> >>>>>> double[] transform(double[])
> >>>>>> double[] inverseTransform(double[])
> >>>>>> I you don't want to be Coordinate implementation dependant
> >>>>>> I also think that having separate setX, forward() and getX method may
> >>>>>> not be very safe from a programmer point of view, because if you do
> >>>>>> those operations in different places in the code, it may be hard to 
> >>>>>> know
> >>>>>> if the transformation has been done when comes the time to use the
> >>>>>> getX/getY method.
> >>>>>> I'm curious to know why you separated set, transform and get methods
> >>>>>>
> >>>>>> 2 - second point is about semantic
> >>>>>> Projection is not appropriate as it is reserved to mathematical
> >>>>>> transformation from the geographic coordinates to a plane.
> >>>>>> In GeoAPI (geotools, epsg...), things are generally named as follows :
> >>>>>>
> >>>>>> CoordinateOperation : any operation on coordinates (it should be the
> >>>>>> name of your interface)
> >>>>>>
> >>>>>>   * Coordinate transformation (involving a Datum cahnge -
> >>>>>>     transformation is based on estimated parameters) : many useful
> >>>>>>     transformations involve a datum change (transformations from old
> >>>>>>     local datums to new international datum)
> >>>>>>   * Coordinate conversion (not involving any Datum change - conversion
> >>>>>>     is a mathematic transformation)
> >>>>>>         o Projection : most conversion operations are projections
> >>>>>>
> >>>>>> 3 - JTS and OpenJUMP can use 3D coordinates, and I think that the
> >>>>>> coordinate operation package must be able to deal with those 3D
> >>>>>> coordinates (transform altitudes to ellpsoidal heights for example).
> >>>>>>
> >>>>>> my 2 cents
> >>>>>>
> >>>>>> Michael
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>> -------------------------------------------------------------------------
> >>>>> This SF.net email is sponsored by: Microsoft
> >>>>> Defy all challenges. Microsoft(R) Visual Studio 2005.
> >>>>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> >>>>> _______________________________________________
> >>>>> Jump-pilot-devel mailing list
> >>>>> Jump-pilot-devel@lists.sourceforge.net
> >>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>> -------------------------------------------------------------------------
> >>>> This SF.net email is sponsored by: Microsoft
> >>>> Defy all challenges. Microsoft(R) Visual Studio 2005.
> >>>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> >>>> _______________________________________________
> >>>> Jump-pilot-devel mailing list
> >>>> Jump-pilot-devel@lists.sourceforge.net
> >>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
> >>>>
> >>>>
> >>>>
> >>>>
> >>> -------------------------------------------------------------------------
> >>> This SF.net email is sponsored by: Microsoft
> >>> Defy all challenges. Microsoft(R) Visual Studio 2005.
> >>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> >>> _______________________________________________
> >>> Jump-pilot-devel mailing list
> >>> Jump-pilot-devel@lists.sourceforge.net
> >>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
> >>>
> >>>
> >>>
> >>> ------------------------------------------------------------------------
> >>>
> >>> /*
> >>> * Project Name: SurveyOS Spatial Reference Systems
> >>> * Original Organization Name: The SurveyOs Project
> >>> * Original Programmer Name: The Sunburned Surveyor
> >>> * Current Maintainer Name: The SurveyOS Project
> >>> * Current Maintainer Contact Information
> >>> *    E-Mail Address: The Sunburned Surveyor
> >>> * Copyright Holder: The SurveyOS Project
> >>> * Date Last Modified: Sep 5, 2007
> >>> * Current Version Number: 00.00.01
> >>> * IDE Name: Eclipse
> >>> * IDE Version: 3.2.1
> >>> * Type: Java Class
> >>> */
> >>> package net.surveyos.sourceforge.srs;
> >>>
> >>> public interface ISRSTransformation
> >>> {
> >>>     public double getLocalXOrdinate(double argWGS84Latitude, double 
> >>> argWGS84Longitude, boolean argIsEllipsoidHeight);
> >>>
> >>>     public double getLocalYOrdinate(double argWGS84Latitude, double 
> >>> argWGS84Longitude, double argHeightOrEleveation, boolean 
> >>> argIsEllipsoidHeight);
> >>>
> >>>     public double getEllipsoidHeight(double argWGS84Latitude, double 
> >>> argWGS84Longitude, double argEleveation);
> >>>
> >>>     public double getElevation(double argWGS84Latitude, double 
> >>> argWGS84Longitude, double argEllipsoidHeight);
> >>>
> >>>     public String getSpatialReferenceSystemName();
> >>>
> >>>     public boolean isGeoidSupported();
> >>> }
> >>>
> >>>
> >>> ------------------------------------------------------------------------
> >>>
> >>> -------------------------------------------------------------------------
> >>> This SF.net email is sponsored by: Microsoft
> >>> Defy all challenges. Microsoft(R) Visual Studio 2005.
> >>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> >>>
> >>> ------------------------------------------------------------------------
> >>>
> >>> _______________________________________________
> >>> Jump-pilot-devel mailing list
> >>> Jump-pilot-devel@lists.sourceforge.net
> >>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
> >>>
> >>>
> >
> >
> > -------------------------------------------------------------------------
> > This SF.net email is sponsored by: Microsoft
> > Defy all challenges. Microsoft(R) Visual Studio 2005.
> > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> > _______________________________________________
> > Jump-pilot-devel mailing list
> > Jump-pilot-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
> >
> >
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2005.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> Jump-pilot-devel mailing list
> Jump-pilot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to