> ... 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