Michael wrote: "JtsTransformFactory.createCoordinateConversion("EPSG:3005", "EPSG:26910"); to be able to manage other crs databases."
Good point Michael. Michael wrote: "A simple XYZ shift has to do with spatial coordinates, as it is one of the possible operation to transform geocentric coordinates from one datum to another. ;-)" I knew you were going to say that. :] It seems that CoordinateOperation doesn't really indicate to me that something is happening with transformations between spatial reference systems. But this really isn't that important. I guess I'm more easily confused that others. :] SS On 9/10/07, Michaël Michaud <[EMAIL PROTECTED]> wrote: > Sunburned Surveyor a écrit : > > >Michael wrote: "CoordinateOperation should be the main interface." > > > >O.K. - The only thing I find a little confusing about this is that a > >CoordinateOperation might have nothing to do with spatial reference > >systems. I might be simpling translating all coordinates by a single > >XYZ shift, for example. > > > > > A simple XYZ shift has to do with spatial coordinates, as it is one of > the possible operation > to transform geocentric coordinates from one datum to another. ;-) > > Michael > > PS : other datum transformations are helmert transformations, with > rotation and scale parameter added to the translation.. > > >But this probably isn't all that important. We know what we want to > >do, and a Rose by any other name smells just as sweet. :] > > > >Michael 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." > > > >I didn't think about this case. But perhaps that is a performance cost > >we can accept in the name of simplicity? After all, it would be hard > >to design a "fits-most" or "fits-all" transformation library that > >performs well for all scenarios. I think our "in-between" spatial > >reference system or "pivot" as you call it should work well for just > >the majority of cases. > > > >SS > > > > > > > >On 9/10/07, Michaël Michaud <[EMAIL PROTECTED]> wrote: > > > > > >>>Thirdly, I think it may be a mistake to create a separate > >>>CoordinateOperation interface. I believe this will lead us down the > >>>GeoTools path. A path with many interfaces and classes. What we want > >>>to do is pretty simple, provide ordinate values in one system and get > >>>ordinate values back in some other system. Let's do that with just one > >>>interface. This will make things incredibly simple for users of the > >>>library, and will place the burden of the details on the interface > >>>implementers, where I think it should be. We can always provide all > >>>sorts of helper classes and abstract classes that can be used by > >>>implementers. (I was thinking about this last night. It really work > >>>great. For example: I'm working on a Gnomic map projection between the > >>>equator and the north pole. Once this projection is finished I can > >>>create an abstract class. Once the abstract class is complete all > >>>someone else needs to do is change the parameters. The algorithm's > >>>remain the same.) > >>> > >>> > >>> > >>> > >>CoordinateOperation should be the main interface. It will be difficult > >>to avoid completely subinterfaces or abstract classes as there are so > >>many operation families, but I agree things should be as simple as > >>possible. And any programmer should be able to add his transformation > >>implementing directly CoordinateOperation. My example with > >>CoordinateConversion, CoordinateTransformation, CoordinateProjection was > >>just to mention that Projection was not the exact word for the general > >>interface. But I don't say we need as many interfaces. > >> > >> > >> > >>>Finally, I want to address the issue raised in this question of Michael's: > >>> > >>>"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 ?)" > >>> > >>>This is why I think it is really important to define a generic > >>>"in-between" spatial reference system. This really simplifies things. > >>> > >>> > >>> > >>> > >>Yes, this is the best way to go. Indeed, I think most libraries works > >>more or less the way you describe, and the main > >>CoordinatereferenceSystem database (EPSG) define hundreds of datum from > >>a pivot-datum (pivot ?) which is the WGS84. > >>It may be difficult to stick to this principle in some particular cases > >>(if you want to implement two kinds of transformation - let say a > >>precise one and a fast one - from a system to another), but it is the > >>most efficient in the general case. > >>... 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. > >> > >>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 > ------------------------------------------------------------------------- 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