Andrea,
I completely understand… that fix was too easy.
But if the fix is going to be something projection specific, I feel like I need
to know better about what the purpose of this Envelope is to begin with. In the
cyllindrical case I can see the utility in having 2 points as a bound, but in
this (and other) circular cases I’m not sure how two points gives enough data
to be useful.
Based on a better definition of the Envelope, I think we can start making
decisions about what it needs to contain with respect to these circular
projections.
Thanks,
Judd
On Oct 22, 2018, at 1:52 AM, Andrea Aime
<[email protected]<mailto:[email protected]>> wrote:
Hi Judd,
nope, that change cannot be accepted, the output of that code must be in WGS84,
while it might work in your specific case,
it can easily have side effects in other cases. Sorry!
Envelope reprojection among two generic CRSs is a complicated topic, has a
number of heuristics and special cases for
particular projections, the code doing it is in GeoTools around this area:
https://github.com/geotools/geotools/blob/master/modules/library/referencing/src/main/java/org/geotools/referencing/CRS.java#L1528
Might not be exactly where it breaks, but likely a good place to add a
breakpoint to start an investigation, if not reached you can check which
methods call it
and backtrack until you find a place where breakpoint is reached
Code change contributions are welcomed under these guidelines:
https://github.com/geotools/geotools/blob/master/CONTRIBUTING.md
Regardless of whether you can make a fix, it's a good idea to create a bug
report, possibly with a small test case reproducing the
problem
Cheers
Andrea
On Wed, Oct 17, 2018 at 9:38 PM Judd Taylor
<[email protected]<mailto:[email protected]>> wrote:
I now have a fix for this issue. Basically, where the envelope is being
computed, catch a TransformException, and in that case just return a
GeneralEnvelope object. All works well with this change.
Now how to I go about getting this fix considered for inclusion upstream?
Please let me know how/who to submit this to.
Thanks,
Judd
Index: main/src/main/java/org/geoserver/data/util/CoverageStoreUtils.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- main/src/main/java/org/geoserver/data/util/CoverageStoreUtils.java (date
1539803792000)
+++ main/src/main/java/org/geoserver/data/util/CoverageStoreUtils.java (date
1539803792000)
@@ -274,9 +274,13 @@
//
////
final CoordinateReferenceSystem targetCRS = DefaultGeographicCRS.WGS84;
- final GeneralEnvelope targetEnvelope;
+ GeneralEnvelope targetEnvelope;
if (!CRS.equalsIgnoreMetadata(sourceCRS, targetCRS)) {
- targetEnvelope = CRS.transform(envelope, targetCRS);
+ try {
+ targetEnvelope = CRS.transform(envelope, targetCRS);
+ } catch( TransformException e ) {
+ targetEnvelope = new GeneralEnvelope(envelope);
+ }
} else {
targetEnvelope = new GeneralEnvelope(envelope);
}
________________________________
From: Judd Taylor
Sent: Tuesday, October 16, 2018 3:42 PM
To:
[email protected]<mailto:[email protected]>
Subject: RE: Orthographic Coverage Layer
I have debugged through the code, and can confirm what is going on is as I
suspected.
When you hit the "publish" button on the add layer page, CatalogBuilder.java is
trying to define a lat/lon bounding box for this data. It calls
CoverageStoreUtils.getWGS84LonLatEnvelope(), and the envelop it is passing has
the wrong points selected.
The envelope has [(-6378136.9, -6378136.9),( 6378136.9, 6378136.9)]. These
limits (in meters) are not valid as points, as they fall outside the
orthographic sphere. Basically, it's assuming the projection is cylindrical,
and then trying to get the lat/lon bounding box by doing an inverse projection
on the bottom left and top right points.
As I said before, on a full disk orthographic projection, you need to take as
bounds 4 points, and go across the axes in a + shape. And even then if it's
oblique, there may be issues.
Here's what I'm going to try today:
1. Calculate the envelope max based on the following points: (xmin,0),
(xmax,0), (0,ymin), (0,ymax).
2. The the max/mins of those lat/lons returned.
3. Correct the max or min to 90/-90 if the projection is oblique full disk
depending on if the center latitude is in the northern or southern hemisphere.
This is because the top most point can be on the other side of the globe, and
thus south of the most northerly point included in the map.
This should work, I've used this before. The big question is where I need to
insert this logic into the code...
-Judd
________________________________
From: Judd Taylor
Sent: Thursday, October 11, 2018 9:14 AM
To:
[email protected]<mailto:[email protected]>
Subject: Orthographic Coverage Layer
I seem to be unable to add a WorldImage layer in a custom oblique orthographic
projection.
See the full stack trace below. But I think I know what the issue is:
Caused by: org.geotools.referencing.operation.projection.ProjectionException:
Point outside hemisphere of projection. at
org.geotools.referencing.operation.projection.ObliqueOrthographic.inverseTransformNormalized(ObliqueOrthographic.java:96)
at
org.geotools.referencing.operation.projection.MapProjection$Inverse.transform(MapProjection.java:1050)
at
org.geotools.referencing.operation.projection.MapProjection$Inverse.transform(MapProjection.java:1109)
at
org.geotools.referencing.operation.transform.AbstractMathTransform.transform(AbstractMathTransform.java:218)
at org.geotools.referencing.CRS.transform(CRS.java:1391) at
org.geotools.referencing.CRS.transform(CRS.java:1471) at
org.geotools.referencing.CRS.transform(CRS.java:1299) at
org.geoserver.data.util.CoverageStoreUtils.getWGS84LonLatEnvelope(CoverageStoreUtils.java:279)
at
org.geoserver.catalog.CatalogBuilder.buildCoverageInternal(CatalogBuilder.java:999)
at org.geoserver.catalog.CatalogBuilder.buildCoverage(CatalogBuilder.java:944)
at org.geoserver.catalog.CatalogBuilder.buildCoverage(CatalogBuilder.java:893)
at
org.geoserver.web.data.layer.NewLayerPage.buildLayerInfo(NewLayerPage.java:422)
... 112 more
It seems it's trying to compute an envelope by using an inverse projection, and
it's applying this to either all of the pixels in the image, or the corners.
The image contains a full hemisphere, so it has no valid corners, and a large
number of the pixels will return an invalid inverse projection.
I've used this same layer and projection in GeoTools in the old application,
but I can't get past the "add layer" screen in GeoServer.
So I think this is a bug. If it's trying to compute the geographic extents, it
should take a measurement across the central axes of the file (+ instead of
[]). If it's doing the inverse of every pixel in the image, it should probably
just ignore the errant pixels. Another thing to watch out for is the oblique
nature, where the top of the image can be further south than pixels below it.
I can provide the layer data for testing. Unfortunately, I haven't been able to
tinker myself on this, as for some reason the source won't build on my kubuntu
18 system.
I could use any advice for how to fix this, and offer any of my experience with
this as well.
If I should submit this as a bug, just let me know where. I would also be
interested in knowing if there are other method of communication on this issue
that are faster than Email (IRC, etc).
Thanks,
Judd
_______________________________________________
Geoserver-users mailing list
Please make sure you read the following two resources before posting to this
list:
- Earning your support instead of buying it, but Ian Turton:
http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines:
http://geoserver.org/comm/userlist-guidelines.html
If you want to request a feature or an improvement, also see this:
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer
[email protected]<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/geoserver-users
--
Regards, Andrea Aime == GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information. == Ing. Andrea Aime @geowolf
Technical Lead GeoSolutions S.A.S. Via di Montramito 3/A 55054 Massarosa (LU)
phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 8844549
http://www.geo-solutions.it<http://www.geo-solutions.it/>
http://twitter.com/geosolutions_it
------------------------------------------------------- Con riferimento alla
normativa sul trattamento dei dati personali (Reg. UE 2016/679 - Regolamento
generale sulla protezione dei dati “GDPR”), si precisa che ogni circostanza
inerente alla presente email (il suo contenuto, gli eventuali allegati, etc.) è
un dato la cui conoscenza è riservata al/i solo/i destinatario/i indicati dallo
scrivente. Se il messaggio Le è giunto per errore, è tenuta/o a cancellarlo,
ogni altra operazione è illecita. Le sarei comunque grato se potesse darmene
notizia. This email is intended only for the person or entity to which it is
addressed and may contain information that is privileged, confidential or
otherwise protected from disclosure. We remind that - as provided by European
Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or
the information herein by anyone other than the intended recipient is
prohibited. If you have received this email by mistake, please notify us
immediately by telephone or e-mail.
_______________________________________________
Geoserver-users mailing list
Please make sure you read the following two resources before posting to this
list:
- Earning your support instead of buying it, but Ian Turton:
http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines:
http://geoserver.org/comm/userlist-guidelines.html
If you want to request a feature or an improvement, also see this:
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-users