From: Mike O'T. <mon...@gm...> - 2011-07-28 21:03:36
|
Hello All, I'm having an issue with a point transformation. I'm using 8.0-M1 to preform a transformation from WGS84 to a Cartesian system suitable for plotting points on a 2d graph. I know the DefaultGeocentricCRS.CARTESIAN uses a 3D system. What type of geometry should I be transforming this into? I will want to use this to plot on an x,y graph. Right now the last line of code produces the error. Thanks Mike Code: Coordinate coord = new Coordinate(longitude, latitude ); Point geoPoint = geometryFactory.createPoint( coord ); CoordinateReferenceSystem sourceCRS = DefaultGeographicCRS.WGS84; CoordinateReferenceSystem targetCRS = DefaultGeocentricCRS.CARTESIAN; MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, false); Point targetGeometry = (Point) JTS.transform(geoPoint, transform); Error: Exception: java.lang.IllegalArgumentException Message: dimension must be <= 3 Stack trace: com.vividsolutions.jts.geom.impl.CoordinateArraySequenceFactory.create(CoordinateArraySequenceFactory.java:90) org.geotools.geometry.jts.DefaultCoordinateSequenceTransformer.transform(DefaultCoordinateSequenceTransformer.java:92) org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.projectCoordinateSequence(GeometryCoordinateSequenceTransformer.java:185) org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.transformPoint(GeometryCoordinateSequenceTransformer.java:172) org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.transform(GeometryCoordinateSequenceTransformer.java:87) org.geotools.geometry.jts.JTS.transform(JTS.java:240) edu.agrid.sensorbar.CalcSensorLatLonExtension.convertCRS(CalcSensorLatLonExtension.java:242) edu.agrid.sensorbar.CalcSensorLatLonExtension.doWork(CalcSensorLatLonExtension.java:166) com.rapidminer.operator.Operator.execute(Operator.java:829) com.rapidminer.operator.execution.SimpleUnitExecutor.execute(SimpleUnitExecutor.java:51) com.rapidminer.operator.ExecutionUnit.execute(ExecutionUnit.java:709) com.rapidminer.operator.OperatorChain.doWork(OperatorChain.java:376) com.rapidminer.operator.Operator.execute(Operator.java:829) com.rapidminer.Process.run(Process.java:899) com.rapidminer.Process.run(Process.java:795) com.rapidminer.Process.run(Process.java:790) com.rapidminer.Process.run(Process.java:780) com.rapidminer.gui.ProcessThread.run(ProcessThread.java:75) |
From: Michael B. <mic...@gm...> - 2011-07-29 02:33:54
|
Hi Mike, Two issues here... Firstly, on the code not working, it looks like a bug in the JTS.transform method. It is allocating an array for the destination ordinates based on the number of sourceCRS dimensions (2 in this case) but it should be based on the number of target CRS dimensions instead. I'll create an issue for it. Meanwhile here is a work-around... private double[] latLongToCartesian(double longitude, double latitude) throws Exception { CoordinateReferenceSystem sourceCRS = DefaultGeographicCRS.WGS84; CoordinateReferenceSystem targetCRS = DefaultGeocentricCRS.CARTESIAN; MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, false); double[] srcPt = {longitude, latitude}; double[] dstPt = new double[transform.getTargetDimensions()]; transform.transform(srcPt, 0, dstPt, 0, 1); return dstPt; } Secondly, and more importantly, I don't think you want to do this :) You could just plot them directly, especially if your points are close together, unless you are working close to a pole in which case you could choose an appropriate projected CRS to minimize distortion. If the points are dotted around the world you might want to choose something like the Robinson projection. Hope this helps, Michael On 29 July 2011 07:03, Mike O'Toole <mon...@gm...> wrote: > Hello All, > > I'm having an issue with a point transformation. > > I'm using 8.0-M1 to preform a transformation from WGS84 to a Cartesian system suitable for plotting points on a 2d graph. I know the DefaultGeocentricCRS.CARTESIAN uses a 3D system. What type of geometry should I be transforming this into? I will want to use this to plot on an x,y graph. Right now the last line of code produces the error. > > Thanks > Mike > > Code: > > Coordinate coord = new Coordinate(longitude, latitude ); > Point geoPoint = geometryFactory.createPoint( coord ); > > CoordinateReferenceSystem sourceCRS = DefaultGeographicCRS.WGS84; > CoordinateReferenceSystem targetCRS = DefaultGeocentricCRS.CARTESIAN; > > MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, false); > Point targetGeometry = (Point) JTS.transform(geoPoint, transform); > > > Error: > > Exception: java.lang.IllegalArgumentException > Message: dimension must be <= 3 > Stack trace: > > com.vividsolutions.jts.geom.impl.CoordinateArraySequenceFactory.create(CoordinateArraySequenceFactory.java:90) > org.geotools.geometry.jts.DefaultCoordinateSequenceTransformer.transform(DefaultCoordinateSequenceTransformer.java:92) > org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.projectCoordinateSequence(GeometryCoordinateSequenceTransformer.java:185) > org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.transformPoint(GeometryCoordinateSequenceTransformer.java:172) > org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.transform(GeometryCoordinateSequenceTransformer.java:87) > org.geotools.geometry.jts.JTS.transform(JTS.java:240) > edu.agrid.sensorbar.CalcSensorLatLonExtension.convertCRS(CalcSensorLatLonExtension.java:242) > edu.agrid.sensorbar.CalcSensorLatLonExtension.doWork(CalcSensorLatLonExtension.java:166) > com.rapidminer.operator.Operator.execute(Operator.java:829) > com.rapidminer.operator.execution.SimpleUnitExecutor.execute(SimpleUnitExecutor.java:51) > com.rapidminer.operator.ExecutionUnit.execute(ExecutionUnit.java:709) > com.rapidminer.operator.OperatorChain.doWork(OperatorChain.java:376) > com.rapidminer.operator.Operator.execute(Operator.java:829) > com.rapidminer.Process.run(Process.java:899) > com.rapidminer.Process.run(Process.java:795) > com.rapidminer.Process.run(Process.java:790) > com.rapidminer.Process.run(Process.java:780) > com.rapidminer.gui.ProcessThread.run(ProcessThread.java:75) > ------------------------------------------------------------------------------ > Got Input? Slashdot Needs You. > Take our quick survey online. Come on, we don't ask for help often. > Plus, you'll get a chance to win $100 to spend on ThinkGeek. > http://p.sf.net/sfu/slashdot-survey > _______________________________________________ > Geotools-gt2-users mailing list > Geo...@li... > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > |
From: Michael B. <mic...@gm...> - 2011-07-29 03:59:02
|
Here is the bug report... http://jira.codehaus.org/browse/GEOT-3763 Michael |
From: serega_sh <ser...@gm...> - 2013-02-13 18:09:35
|
I have pretty the same problem. I have input data for sectors: center of sector in latitude, longitude, radius of sector in meters, size of sector angle: (start angle, end angle) I need to calculate intersections between them and plot them on google maps (kml format) The problem is that I can't make them work together :( If I try to sepcify radius in meters and center in lati/lon, I get huge sectors. If I try to convert lat/lon to efaultGeocentricCRS.CARTESIAN and back I do gt an error. Please help, I don't know how to solve such problem. -- View this message in context: http://osgeo-org.1560.n6.nabble.com/WGS84-to-a-Cartesian-transformation-tp4318606p5034023.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: Ákos M. <ak...@ma...> - 2013-02-14 09:13:16
|
On 13/02/13 19:09, serega_sh wrote: > I have pretty the same problem. > I have input data for sectors: center of sector in latitude, longitude, > radius of sector in meters, size of sector angle: (start angle, end angle) > > I need to calculate intersections between them and plot them on google maps > (kml format) > The problem is that I can't make them work together :( > If I try to sepcify radius in meters and center in lati/lon, I get huge > sectors. > If I try to convert lat/lon to efaultGeocentricCRS.CARTESIAN and back I do > gt an error. > > Please help, I don't know how to solve such problem. > can you provide a code sample that doesn't do what you're expecting it to do? |
From: serega_sh <ser...@gm...> - 2013-02-14 09:46:42
|
Hi, Please help me. I have a mess in my head. My input: N lines with values: -longitude, latittude, (a senter of a sector) -radius (in meters 10...5000 meters) -start angle (from "12 o'clock") -angle width (in defrees) My output: Find sectors that intersects, output them to KML (or something else) and visualize (I've chosen KML because it can be uploaded to google maps and easilly seen) Here is my code.... @Test(enabled = false) public void visualizeRetailStoreMC7700001() throws ParserException, IOException, FactoryException, TransformException { List<GSMCellLocation> gsmCellLocations = GeoDataSampleHelper.readGSMCellLocationFromMoscowRegion(); RetailStore retailStore = GeoDataSampleHelper.readRetailStoreByCode(MC7700001); GeoPoint storeGeoPoint = retailStore.getStoreLocation().getGeoPoint(); List<Geometry> geometryList = new LinkedList<Geometry>(); GeometricShapeFactory gsFactory = new GeometricShapeFactory(); gsFactory.setCentre(transformToPlanar(new Coordinate(storeGeoPoint.getLongitude(), storeGeoPoint.getLatitude())));//storeGeoPoint.getLatitude(), storeGeoPoint.getLongitude()))); gsFactory.setSize(200); Geometry storeCircle = gsFactory.createEllipse(); geometryList.add(storeCircle); for(GSMCellLocation cellLoc : gsmCellLocations){ gsFactory = new GeometricShapeFactory(); gsFactory.setCentre(transformToPlanar(new Coordinate(cellLoc.getGeoPoint().getLongitude(), cellLoc.getGeoPoint().getLatitude())));//cellLoc.getGeoPoint().getLatitude(), cellLoc.getGeoPoint().getLongitude()))); gsFactory.setSize(cellLoc.getMidDist() * 2); Geometry cellSector = gsFactory.createArc(cellLoc.getStartAngle(), cellLoc.getAngleWidth()); if(cellSector.intersects(storeCircle)){ geometryList.add(cellSector); } } LOG.info("geometryList.size {}",geometryList.size()); Encoder encoder = new Encoder(new KMLConfiguration()); encoder.setIndenting(true); SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); typeBuilder.setName("poi"); typeBuilder.add("geometry", Polygon.class, DefaultGeographicCRS.WGS84);//DefaultGeographicCRS.WGS84); SimpleFeatureType TYPE = typeBuilder.buildFeatureType(); DefaultFeatureCollection features = new DefaultFeatureCollection("test",TYPE); for(int i=0; i<10; i++){ SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE); featureBuilder.add( transformToGeo(geometryList.get(i)));//transformToGeo( SimpleFeature simpleFeature = featureBuilder.buildFeature(String.valueOf(i + 1)); features.add( simpleFeature ); } encoder.encode(features, KML.kml, System.out); } What do I expect: Correctly calculated intersections between sectors correct kml output with intersected sectors Ofcourse, I don't get anyting correctly... ((( Please help, I've spent more than a week trying to deal with geotools. Seems like I completely don't understand the idea of reprojecting CRS... -- View this message in context: http://osgeo-org.1560.n6.nabble.com/WGS84-to-a-Cartesian-transformation-tp4318606p5034219.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: Oleksandr H. <guz...@gm...> - 2013-02-14 15:48:19
|
Hi Serega, please, show your transformtoplanar function. I don't think that cartesian means planar here, it is probably a 3d projectin with a center at the center of the Earth (please, correct me if I am wrong). You need to look for an actual geographic projection for Moscow ( http://www.epsg-registry.org/ search for Name: Russia), I think this could work for you EPSG::1198 -(it says Russian Federation in comments). Good luck Cheers -- Oleksandr (Sasha) Huziy 2013/2/14 serega_sh <ser...@gm...> > Hi, Please help me. I have a mess in my head. > My input: > N lines with values: > -longitude, latittude, (a senter of a sector) > -radius (in meters 10...5000 meters) > -start angle (from "12 o'clock") > -angle width (in defrees) > > My output: > Find sectors that intersects, output them to KML (or something else) and > visualize (I've chosen KML because it can be uploaded to google maps and > easilly seen) > > Here is my code.... > > @Test(enabled = false) > public void visualizeRetailStoreMC7700001() throws ParserException, > IOException, FactoryException, TransformException { > List<GSMCellLocation> gsmCellLocations = > GeoDataSampleHelper.readGSMCellLocationFromMoscowRegion(); > RetailStore retailStore = > GeoDataSampleHelper.readRetailStoreByCode(MC7700001); > GeoPoint storeGeoPoint = > retailStore.getStoreLocation().getGeoPoint(); > > List<Geometry> geometryList = new LinkedList<Geometry>(); > > GeometricShapeFactory gsFactory = new GeometricShapeFactory(); > gsFactory.setCentre(transformToPlanar(new > Coordinate(storeGeoPoint.getLongitude(), > storeGeoPoint.getLatitude())));//storeGeoPoint.getLatitude(), > storeGeoPoint.getLongitude()))); > gsFactory.setSize(200); > Geometry storeCircle = gsFactory.createEllipse(); > geometryList.add(storeCircle); > > for(GSMCellLocation cellLoc : gsmCellLocations){ > gsFactory = new GeometricShapeFactory(); > gsFactory.setCentre(transformToPlanar(new > Coordinate(cellLoc.getGeoPoint().getLongitude(), > > cellLoc.getGeoPoint().getLatitude())));//cellLoc.getGeoPoint().getLatitude(), > cellLoc.getGeoPoint().getLongitude()))); > gsFactory.setSize(cellLoc.getMidDist() * 2); > Geometry cellSector = > gsFactory.createArc(cellLoc.getStartAngle(), cellLoc.getAngleWidth()); > > if(cellSector.intersects(storeCircle)){ > geometryList.add(cellSector); > } > } > LOG.info("geometryList.size {}",geometryList.size()); > > > Encoder encoder = new Encoder(new KMLConfiguration()); > encoder.setIndenting(true); > > SimpleFeatureTypeBuilder typeBuilder = new > SimpleFeatureTypeBuilder(); > typeBuilder.setName("poi"); > typeBuilder.add("geometry", Polygon.class, > DefaultGeographicCRS.WGS84);//DefaultGeographicCRS.WGS84); > > SimpleFeatureType TYPE = typeBuilder.buildFeatureType(); > > > DefaultFeatureCollection features = new > DefaultFeatureCollection("test",TYPE); > > for(int i=0; i<10; i++){ > SimpleFeatureBuilder featureBuilder = new > SimpleFeatureBuilder(TYPE); > featureBuilder.add( > transformToGeo(geometryList.get(i)));//transformToGeo( > SimpleFeature simpleFeature = > featureBuilder.buildFeature(String.valueOf(i + 1)); > features.add( simpleFeature ); > } > encoder.encode(features, KML.kml, System.out); > > } > > What do I expect: > Correctly calculated intersections between sectors > correct kml output with intersected sectors > > Ofcourse, I don't get anyting correctly... ((( > Please help, I've spent more than a week trying to deal with geotools. > Seems > like I completely don't understand the idea of reprojecting CRS... > > > > -- > View this message in context: > http://osgeo-org.1560.n6.nabble.com/WGS84-to-a-Cartesian-transformation-tp4318606p5034219.html > Sent from the geotools-gt2-users mailing list archive at Nabble.com. > > > ------------------------------------------------------------------------------ > Free Next-Gen Firewall Hardware Offer > Buy your Sophos next-gen firewall before the end March 2013 > and get the hardware for free! Learn more. > http://p.sf.net/sfu/sophos-d2d-feb > _______________________________________________ > GeoTools-GT2-Users mailing list > Geo...@li... > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > |
From: serega_sh <ser...@gm...> - 2013-02-14 15:56:33
|
Hi guziy, unfortunately I'm new to geotools and I'm really weak in all that stuff about projection. Here is my code: *//I do try to transform my lat,lon to planar x,y* private static Coordinate transformToPlanar(Coordinate source) throws FactoryException, TransformException{ CoordinateReferenceSystem srcCRS = DefaultGeographicCRS.WGS84; CoordinateReferenceSystem destSRC = DefaultGeocentricCRS.CARTESIAN; boolean lenient = true; // allow for some error due to different datums MathTransform transform = CRS.findMathTransform(srcCRS, destSRC, lenient); return JTS.transform(source, null ,transform); } *//from x,y to lat,lon to output to KML* private static Geometry transformToGeo(Geometry source) throws FactoryException, TransformException{ LOG.info("transformToGeo: {}",source); CoordinateReferenceSystem srcCRS = DefaultGeocentricCRS.CARTESIAN; CoordinateReferenceSystem destCRS = DefaultGeographicCRS.WGS84; boolean lenient = true; // allow for some error due to different datums MathTransform transform = CRS.findMathTransform(srcCRS, destCRS, lenient); return JTS.transform(source, transform); //EXCEPTION HERE!!! See the trace at the end of post } @Test public void drawRetailStoreMC7700001() throws ParserException, IOException, FactoryException, TransformException { * //read source data* List<GSMCellLocation> gsmCellLocations = GeoDataSampleHelper.readGSMCellLocationFromMoscowRegion(); RetailStore retailStore = GeoDataSampleHelper.readRetailStoreByCode(MC7700001); GeoPoint storeGeoPoint = retailStore.getStoreLocation().getGeoPoint(); List<Geometry> geometryList = new LinkedList<Geometry>(); GeometricShapeFactory gsFactory = new GeometricShapeFactory(); gsFactory.setCentre(transformToPlanar(new Coordinate(storeGeoPoint.getLongitude(), storeGeoPoint.getLatitude()))); gsFactory.setSize(200); Geometry storeCircle = gsFactory.createEllipse(); * //find intersection between circle and sectors* for(GSMCellLocation cellLoc : gsmCellLocations){ gsFactory = new GeometricShapeFactory(); gsFactory.setCentre(transformToPlanar(new Coordinate(cellLoc.getGeoPoint().getLongitude(), cellLoc.getGeoPoint().getLatitude()))); gsFactory.setSize(cellLoc.getMidDist() * 2); Geometry cellSector = gsFactory.createArc(cellLoc.getStartAngle(), cellLoc.getAngleWidth()); if(cellSector.intersects(storeCircle)){ geometryList.add(cellSector); } } LOG.info("geometryList.size {}",geometryList.size()); *//prepare output* Encoder encoder = new Encoder(new KMLConfiguration()); encoder.setIndenting(true); SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); typeBuilder.setName("poi"); typeBuilder.add("geometry", Polygon.class, DefaultGeographicCRS.WGS84);//DefaultGeographicCRS.WGS84); SimpleFeatureType TYPE = typeBuilder.buildFeatureType(); DefaultFeatureCollection features = new DefaultFeatureCollection("test",TYPE); *//output first 10 sectors* for(int i=0; i<10; i++){ SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE); featureBuilder.add( transformToGeo(geometryList.get(i))); *//EXCEPTION HERE transformToGeo* SimpleFeature simpleFeature = featureBuilder.buildFeature(String.valueOf(i + 1)); features.add( simpleFeature ); } encoder.encode(features, KML.kml, System.out); } ava.lang.AssertionError: NaN at org.geotools.referencing.operation.transform.GeocentricTransform.inverseTransform(GeocentricTransform.java:438) at org.geotools.referencing.operation.transform.GeocentricTransform.inverseTransform(GeocentricTransform.java:338) at org.geotools.referencing.operation.transform.GeocentricTransform$Inverse.transform(GeocentricTransform.java:546) at org.geotools.geometry.jts.DefaultCoordinateSequenceTransformer.transform(DefaultCoordinateSequenceTransformer.java:123) at org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.projectCoordinateSequence(GeometryCoordinateSequenceTransformer.java:247) at org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.transformLineString(GeometryCoordinateSequenceTransformer.java:210) at org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.transform(GeometryCoordinateSequenceTransformer.java:152) at org.geotools.geometry.jts.JTS.transform(JTS.java:436) It happens on the mentioned line -- View this message in context: http://osgeo-org.1560.n6.nabble.com/WGS84-to-a-Cartesian-transformation-tp4318606p5034341.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: Oleksandr H. <guz...@gm...> - 2013-02-14 16:14:07
|
Instead of DefaultGeocentricCRS.CARTESIAN try this CRS.decode("EPSG:3576"); //http://spatialreference.org/ref/epsg/3576/ 2013/2/14 serega_sh <ser...@gm...> > Hi guziy, unfortunately I'm new to geotools and I'm really weak in all that > stuff about projection. > > Here is my code: > *//I do try to transform my lat,lon to planar x,y* > private static Coordinate transformToPlanar(Coordinate source) throws > FactoryException, TransformException{ > CoordinateReferenceSystem srcCRS = DefaultGeographicCRS.WGS84; > CoordinateReferenceSystem destSRC = DefaultGeocentricCRS.CARTESIAN; > boolean lenient = true; // allow for some error due to different > datums > MathTransform transform = CRS.findMathTransform(srcCRS, destSRC, > lenient); > return JTS.transform(source, null ,transform); > } > *//from x,y to lat,lon to output to KML* > private static Geometry transformToGeo(Geometry source) throws > FactoryException, TransformException{ > LOG.info("transformToGeo: {}",source); > CoordinateReferenceSystem srcCRS = DefaultGeocentricCRS.CARTESIAN; > CoordinateReferenceSystem destCRS = DefaultGeographicCRS.WGS84; > boolean lenient = true; // allow for some error due to different > datums > MathTransform transform = CRS.findMathTransform(srcCRS, destCRS, > lenient); > return JTS.transform(source, transform); //EXCEPTION HERE!!! See > the > trace at the end of post > } > > > @Test > public void drawRetailStoreMC7700001() throws ParserException, > IOException, FactoryException, TransformException { > * //read source data* > List<GSMCellLocation> gsmCellLocations = > GeoDataSampleHelper.readGSMCellLocationFromMoscowRegion(); > RetailStore retailStore = > GeoDataSampleHelper.readRetailStoreByCode(MC7700001); > GeoPoint storeGeoPoint = > retailStore.getStoreLocation().getGeoPoint(); > > List<Geometry> geometryList = new LinkedList<Geometry>(); > > GeometricShapeFactory gsFactory = new GeometricShapeFactory(); > gsFactory.setCentre(transformToPlanar(new > Coordinate(storeGeoPoint.getLongitude(), > > storeGeoPoint.getLatitude()))); > gsFactory.setSize(200); > Geometry storeCircle = gsFactory.createEllipse(); > * //find intersection between circle and sectors* > for(GSMCellLocation cellLoc : gsmCellLocations){ > gsFactory = new GeometricShapeFactory(); > gsFactory.setCentre(transformToPlanar(new > Coordinate(cellLoc.getGeoPoint().getLongitude(), > > cellLoc.getGeoPoint().getLatitude()))); > gsFactory.setSize(cellLoc.getMidDist() * 2); > Geometry cellSector = > gsFactory.createArc(cellLoc.getStartAngle(), cellLoc.getAngleWidth()); > > if(cellSector.intersects(storeCircle)){ > geometryList.add(cellSector); > } > } > LOG.info("geometryList.size {}",geometryList.size()); > > *//prepare output* > Encoder encoder = new Encoder(new KMLConfiguration()); > encoder.setIndenting(true); > > SimpleFeatureTypeBuilder typeBuilder = new > SimpleFeatureTypeBuilder(); > typeBuilder.setName("poi"); > typeBuilder.add("geometry", Polygon.class, > DefaultGeographicCRS.WGS84);//DefaultGeographicCRS.WGS84); > > SimpleFeatureType TYPE = typeBuilder.buildFeatureType(); > > > DefaultFeatureCollection features = new > DefaultFeatureCollection("test",TYPE); > *//output first 10 sectors* > for(int i=0; i<10; i++){ > SimpleFeatureBuilder featureBuilder = new > SimpleFeatureBuilder(TYPE); > featureBuilder.add( transformToGeo(geometryList.get(i))); > *//EXCEPTION HERE transformToGeo* > SimpleFeature simpleFeature = > featureBuilder.buildFeature(String.valueOf(i + 1)); > features.add( simpleFeature ); > } > encoder.encode(features, KML.kml, System.out); > > } > > ava.lang.AssertionError: NaN > at > > org.geotools.referencing.operation.transform.GeocentricTransform.inverseTransform(GeocentricTransform.java:438) > at > > org.geotools.referencing.operation.transform.GeocentricTransform.inverseTransform(GeocentricTransform.java:338) > at > > org.geotools.referencing.operation.transform.GeocentricTransform$Inverse.transform(GeocentricTransform.java:546) > at > > org.geotools.geometry.jts.DefaultCoordinateSequenceTransformer.transform(DefaultCoordinateSequenceTransformer.java:123) > at > > org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.projectCoordinateSequence(GeometryCoordinateSequenceTransformer.java:247) > at > > org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.transformLineString(GeometryCoordinateSequenceTransformer.java:210) > at > > org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer.transform(GeometryCoordinateSequenceTransformer.java:152) > at org.geotools.geometry.jts.JTS.transform(JTS.java:436) > It happens on the mentioned line > > > > -- > View this message in context: > http://osgeo-org.1560.n6.nabble.com/WGS84-to-a-Cartesian-transformation-tp4318606p5034341.html > Sent from the geotools-gt2-users mailing list archive at Nabble.com. > > > ------------------------------------------------------------------------------ > Free Next-Gen Firewall Hardware Offer > Buy your Sophos next-gen firewall before the end March 2013 > and get the hardware for free! Learn more. > http://p.sf.net/sfu/sophos-d2d-feb > _______________________________________________ > GeoTools-GT2-Users mailing list > Geo...@li... > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > |
From: serega_sh <ser...@gm...> - 2013-02-15 09:07:48
|
Thank you very much, it helped me! But the problem is with visualization now. Circle looks ok, but sector has terrible distorsion, I do expect it to look like: <http://osgeo-org.1560.n6.nabble.com/file/n5034488/circles3.gif> but I see someting like that displayed on google earth looks like segment: <http://osgeo-org.1560.n6.nabble.com/file/n5034488/220px-Circle_segment.jpg> what do I do wrong? -- View this message in context: http://osgeo-org.1560.n6.nabble.com/WGS84-to-a-Cartesian-transformation-tp4318606p5034488.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: serega_sh <ser...@gm...> - 2013-02-19 07:33:52
|
Thanks! It really helped. But I've met another problem. I have a coordinate(lat,lon) array for the whole territory of Russia, I can't use CRS.decode("EPSG:3576") for coordinates: (43.79 131.95) I do get an error: WARNING: Prefs file removed in background /home/ssa/.java/.userPrefs/org/geotools/referencing/wkt/prefs.xml common.geo.model.RuntimeConfigurationException: Error during conversion of [(43.792022705078125, 131.9571533203125, NaN)] to [PARAM_MT["Lambert_Azimuthal_Equal_Area", PARAMETER["semi_major", 6378137.0], PARAMETER["semi_minor", 6356752.314245179], PARAMETER["latitude_of_center", 90.0], PARAMETER["longitude_of_center", 90.0], PARAMETER["false_easting", 0.0], PARAMETER["false_northing", 0.0]]] at common.geo.model.builder.v2.GeometryBuilder.toGeometry(GeometryBuilder.java:62) at common.geo.model.builder.v2.GeometryBuilder.buildCircle(GeometryBuilder.java:36) at common.geo.model.builder.v2.GeometryBuilderPerfomanceTest.testCircleCreation(GeometryBuilderPerfomanceTest.java:50) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) What is a best practice of converting from various spatial coords to geometry JTS? -- View this message in context: http://osgeo-org.1560.n6.nabble.com/WGS84-to-a-Cartesian-transformation-tp4318606p5035060.html Sent from the geotools-gt2-users mailing list archive at Nabble.com. |
From: Oleksandr H. <guz...@gm...> - 2013-02-19 15:55:00
|
Hi serrega_sh, You could try Eckert or Mollweide projections, they are global. Here is how I have created the CRS objects https://github.com/guziy/GeotoolsDemo/blob/master/src/main/MollweideAccessor.java You could try maybe now they are available by their codes from CRS.decode. Actually if your needs are just to display, then you could just work in lat-lon and do not bother with projections. Even intersection should be OK in lat-lon, though the radius should be converted to degrees. And remember that the circles in lat lon are not really circles in reality, since 2 degrees west along 5N parallel is smaller than 2 degrees west along 45N parallel. HTH Cheers -- Oleksandr (Sasha) Huziy 2013/2/19 serega_sh <ser...@gm...> > Thanks! It really helped. But I've met another problem. > I have a coordinate(lat,lon) array for the whole territory of Russia, > I can't use CRS.decode("EPSG:3576") for coordinates: (43.79 131.95) > I do get an error: > > > WARNING: Prefs file removed in background > /home/ssa/.java/.userPrefs/org/geotools/referencing/wkt/prefs.xml > common.geo.model.RuntimeConfigurationException: Error during conversion of > [(43.792022705078125, 131.9571533203125, NaN)] to > [PARAM_MT["Lambert_Azimuthal_Equal_Area", > PARAMETER["semi_major", 6378137.0], > PARAMETER["semi_minor", 6356752.314245179], > PARAMETER["latitude_of_center", 90.0], > PARAMETER["longitude_of_center", 90.0], > PARAMETER["false_easting", 0.0], > PARAMETER["false_northing", 0.0]]] > at > > common.geo.model.builder.v2.GeometryBuilder.toGeometry(GeometryBuilder.java:62) > at > > common.geo.model.builder.v2.GeometryBuilder.buildCircle(GeometryBuilder.java:36) > at > > common.geo.model.builder.v2.GeometryBuilderPerfomanceTest.testCircleCreation(GeometryBuilderPerfomanceTest.java:50) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > > org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) > > What is a best practice of converting from various spatial coords to > geometry JTS? > > > > -- > View this message in context: > http://osgeo-org.1560.n6.nabble.com/WGS84-to-a-Cartesian-transformation-tp4318606p5035060.html > Sent from the geotools-gt2-users mailing list archive at Nabble.com. > > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://p.sf.net/sfu/appdyn_d2d_feb > _______________________________________________ > GeoTools-GT2-Users mailing list > Geo...@li... > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users > |
From: Oleksandr H. <guz...@gm...> - 2013-02-19 15:56:45
|
Erratum Actually if your needs are just to display, then you could just work in lat-lon and do not bother with projections. Even intersection should be OK in lat-lon, though the radius should be converted to degrees. And remember that the circles in lat lon are not really circles in reality, since 2 degrees west along 5N parallel is bigger than 2 degrees west along 45N parallel. sorry)) 2013/2/19 Oleksandr Huziy <guz...@gm...> > Hi serrega_sh, > > You could try Eckert or Mollweide projections, they are global. > Here is how I have created the CRS objects > https://github.com/guziy/GeotoolsDemo/blob/master/src/main/MollweideAccessor.java > > You could try maybe now they are available by their codes from CRS.decode. > > Actually if your needs are just to display, then you could just work in > lat-lon and do not bother with projections. > Even intersection should be OK in lat-lon, though the radius should be > converted to degrees. And remember that the circles in lat lon are not > really circles in reality, since 2 degrees west along 5N parallel is > smaller than 2 degrees west along 45N parallel. > > HTH > > Cheers > -- > Oleksandr (Sasha) Huziy > > > 2013/2/19 serega_sh <ser...@gm...> > >> Thanks! It really helped. But I've met another problem. >> I have a coordinate(lat,lon) array for the whole territory of Russia, >> I can't use CRS.decode("EPSG:3576") for coordinates: (43.79 131.95) >> I do get an error: >> >> >> WARNING: Prefs file removed in background >> /home/ssa/.java/.userPrefs/org/geotools/referencing/wkt/prefs.xml >> common.geo.model.RuntimeConfigurationException: Error during conversion of >> [(43.792022705078125, 131.9571533203125, NaN)] to >> [PARAM_MT["Lambert_Azimuthal_Equal_Area", >> PARAMETER["semi_major", 6378137.0], >> PARAMETER["semi_minor", 6356752.314245179], >> PARAMETER["latitude_of_center", 90.0], >> PARAMETER["longitude_of_center", 90.0], >> PARAMETER["false_easting", 0.0], >> PARAMETER["false_northing", 0.0]]] >> at >> >> common.geo.model.builder.v2.GeometryBuilder.toGeometry(GeometryBuilder.java:62) >> at >> >> common.geo.model.builder.v2.GeometryBuilder.buildCircle(GeometryBuilder.java:36) >> at >> >> common.geo.model.builder.v2.GeometryBuilderPerfomanceTest.testCircleCreation(GeometryBuilderPerfomanceTest.java:50) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at >> >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >> at >> >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >> at java.lang.reflect.Method.invoke(Method.java:597) >> at >> >> org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) >> >> What is a best practice of converting from various spatial coords to >> geometry JTS? >> >> >> >> -- >> View this message in context: >> http://osgeo-org.1560.n6.nabble.com/WGS84-to-a-Cartesian-transformation-tp4318606p5035060.html >> Sent from the geotools-gt2-users mailing list archive at Nabble.com. >> >> >> ------------------------------------------------------------------------------ >> Everyone hates slow websites. So do we. >> Make your web apps faster with AppDynamics >> Download AppDynamics Lite for free today: >> http://p.sf.net/sfu/appdyn_d2d_feb >> _______________________________________________ >> GeoTools-GT2-Users mailing list >> Geo...@li... >> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users >> > > |