Stefan, I always liked getNorthing() and getEasting over getX and getY myself. It must be a surveyor thing!
Still, getX and getY work to, as long as this is explained in the Javadoc or developer documentation. SS On 9/10/07, Sunburned Surveyor <[EMAIL PROTECTED]> wrote: > I want to add some comments to this conversation. I hope that I don't > really confuse things. I think Paul is heading in a great direction > with his interface, and I believe Michael is adding some important > things to the conversation. > > First, I agree with Paul on avoiding the JTS Coordinate object at a > low level. We really need to work on primitive values like doubles, > and not JTS Coordinate objects. This will allow for wider adoption of > our library. Work with doubles and provide wrappers or utility methods > for JTS. I'd prefer to see all of our low-level coordinate > transformation code packaged in a single JAR, without a dependency on > JTS. We can this have a separate JAR that depends on JTS. > > Secondly, I agree with Michael on using z values. I think we should > carefully consider methods that accept the Z value as a ordinate. As > Michael pointed out this is an important parameter in some > transformations. > > 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.) > > 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. > 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 > > > > ------------------------------------------------------------------------- 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