Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [geomesa-users] Query with coordinate 0.0

Nathan,

I believe we have a fix that corrects the specific issue you reported
(as well as a few other small-yet-related issues).  The public pull
request on GitHub is here:

  https://github.com/locationtech/geomesa/pull/851

Feel free to take a look.  Emilio has already finished one review.
Provided there are no dissenting opinions after other folks read through
it later today, it may be merged this afternoon.

Thanks for helping us chase this down!

Sincerely,
  -- Chris


On Mon, 2016-03-28 at 14:00 -0600, Nathan Mercer wrote:
> More updates.
> 
>  
> 
> My Polygon has the following coordinates:
> 
> -109.1002146731,44.3303918738
> 
> -94.5281043236,44.3303918738
> 
> -94.5281043236,34.2072886664
> 
> -109.1002146731,34.2072886664
> 
>  
> 
> It appears that not only 0.0 is the problem, but multiples of 45
> degrees. So if I use a point coordinate of (-95, 45) or (-90, 60) I
> will still get the exception. It might be an issue with a trig
> function somewhere.
> 
>  
> 
> Note that I tried a geomesa export call using a –q as follows:
> 
> "CONTAINS("the_geom",POINT(-95 44))"
> 
>  
> 
> And it still fails with this exception when I call with a point with a
> coordinate as a multiple of 45.
> 
>  
> 
> From: geomesa-users-bounces@xxxxxxxxxxxxxxxx
> [mailto:geomesa-users-bounces@xxxxxxxxxxxxxxxx] On Behalf Of Nathan
> Mercer
> Sent: Monday, March 28, 2016 1:14 PM
> To: Geomesa User discussions <geomesa-users@xxxxxxxxxxxxxxxx>
> Subject: Re: [geomesa-users] Query with coordinate 0.0
> 
> 
>  
> 
> Thanks Emilio,
> 
>  
> 
> I have not tried your maven scala console yet, but I have tried some
> other things and have some more information.
> 
>  
> 
> First, I am using Accumulo 1.6.5 and GeoTools 14.2 
> 
> I am now using a simple box for my MultiPolygon and it still fails.
> The box is just some random coordinates that appear over the United
> States.
> 
> I tried re-implementing the query using Java and without Spark and I
> am getting the same results. The code is as follows:
> 
>  
> 
> Point pnt = JTSFactoryFinder.getGeometryFactory().createPoint(new
> Coordinate(0.0,10.0));
> 
> FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
> 
> Filter f = ff.contains(ff.property("the_geom"), ff.literal(pnt));
> 
> Query q = new Query(“FeatureName”, f);
> 
> AccumuloFeatureStore featureStore =
> (AccumuloFeatureStore)dataStore.getFeatureSource(“FeatureName”);
> 
> SimpleFeatureCollection results = featureStore.getFeatures(q);
> 
> System.out.println(results.isEmpty());
> 
>  
> 
> Here is my stack trace. Strangely, using this method I get the error
> even with non-zero coordinates if they are outside my polygon. Not
> sure why this wasn’t the case before.
> 
>  
> 
> Exception in thread "main" java.lang.IllegalStateException: getX
> called on empty Point
> 
>         at com.vividsolutions.jts.geom.Point.getX(Point.java:124)
> 
>         at org.locationtech.geomesa.utils.geohash.GeohashUtils
> $.considerCandidate$1(GeohashUtils.scala:1023)
> 
>         at org.locationtech.geomesa.utils.geohash.GeohashUtils
> $.getUniqueGeohashSubstringsInPolygon(GeohashUtils.scala:1043)
> 
>         at org.locationtech.geomesa.accumulo.index.GeoHashPlanner
> $class.geomToGeoHashes(QueryPlanners.scala:340)
> 
>         at
> org.locationtech.geomesa.accumulo.index.GeoHashKeyPlanner.geomToGeoHashes(QueryPlanners.scala:374)
> 
>         at org.locationtech.geomesa.accumulo.index.GeoHashPlanner
> $class.polyToPlan(QueryPlanners.scala:345)
> 
>         at
> org.locationtech.geomesa.accumulo.index.GeoHashKeyPlanner.polyToPlan(QueryPlanners.scala:374)
> 
>         at org.locationtech.geomesa.accumulo.index.GeoHashPlanner
> $class.getKeyPlan(QueryPlanners.scala:363)
> 
>         at
> org.locationtech.geomesa.accumulo.index.GeoHashKeyPlanner.getKeyPlan(QueryPlanners.scala:374)
> 
>         at
> org.locationtech.geomesa.accumulo.index.GeoHashKeyPlanner.getKeyPlan(QueryPlanners.scala:376)
> 
>         at org.locationtech.geomesa.accumulo.index.CompositePlanner
> $$anonfun$12.apply(QueryPlanners.scala:500)
> 
>         at org.locationtech.geomesa.accumulo.index.CompositePlanner
> $$anonfun$12.apply(QueryPlanners.scala:500)
> 
>         at scala.collection.TraversableLike$$anonfun$map
> $1.apply(TraversableLike.scala:245)
> 
>         at scala.collection.TraversableLike$$anonfun$map
> $1.apply(TraversableLike.scala:245)
> 
>         at scala.collection.immutable.List.foreach(List.scala:381)
> 
>         at scala.collection.TraversableLike
> $class.map(TraversableLike.scala:245)
> 
>         at scala.collection.immutable.List.map(List.scala:285)
> 
>         at
> org.locationtech.geomesa.accumulo.index.CompositePlanner.getKeyPlan(QueryPlanners.scala:500)
> 
>         at
> org.locationtech.geomesa.accumulo.index.STIdxStrategy.planQuery(STIdxStrategy.scala:225)
> 
>         at
> org.locationtech.geomesa.accumulo.index.STIdxStrategy.getQueryPlan(STIdxStrategy.scala:122)
> 
>         at
> org.locationtech.geomesa.accumulo.index.STIdxStrategy.getQueryPlan(STIdxStrategy.scala:33)
> 
>         at org.locationtech.geomesa.accumulo.index.QueryPlanner
> $$anonfun$getQueryPlans$6$$anonfun$2.apply(QueryPlanner.scala:141)
> 
>         at org.locationtech.geomesa.accumulo.index.QueryPlanner
> $$anonfun$getQueryPlans$6$$anonfun$2.apply(QueryPlanner.scala:141)
> 
>         at org.locationtech.geomesa.utils.stats.MethodProfiling
> $class.profile(MethodProfiling.scala:26)
> 
>         at
> org.locationtech.geomesa.accumulo.index.QueryPlanner.profile(QueryPlanner.scala:55)
> 
>         at org.locationtech.geomesa.accumulo.index.QueryPlanner
> $$anonfun$getQueryPlans$6.apply(QueryPlanner.scala:141)
> 
>         at org.locationtech.geomesa.accumulo.index.QueryPlanner
> $$anonfun$getQueryPlans$6.apply(QueryPlanner.scala:136)
> 
>         at scala.collection.Iterator$$anon$11.next(Iterator.scala:370)
> 
>         at org.locationtech.geomesa.accumulo.util.CloseableIterator
> $$anon$5.next(CloseableIterator.scala:34)
> 
>         at org.locationtech.geomesa.accumulo.util.SelfClosingIterator
> $$anon$1.next(CloseableIterator.scala:103)
> 
>         at org.locationtech.geomesa.accumulo.util.CloseableIterator
> $$anon$2.<init>(CloseableIterator.scala:65)
> 
>         at org.locationtech.geomesa.accumulo.util.CloseableIterator
> $class.ciFlatMap(CloseableIterator.scala:64)
> 
>         at org.locationtech.geomesa.accumulo.util.SelfClosingIterator
> $$anon$1.ciFlatMap(CloseableIterator.scala:97)
> 
>         at org.locationtech.geomesa.accumulo.index.QueryPlanner.scan
> $1(QueryPlanner.scala:92)
> 
>         at
> org.locationtech.geomesa.accumulo.index.QueryPlanner.executePlans(QueryPlanner.scala:113)
> 
>         at
> org.locationtech.geomesa.accumulo.index.QueryPlanner.runQuery(QueryPlanner.scala:83)
> 
>         at
> org.locationtech.geomesa.accumulo.data.AccumuloFeatureReaderImpl.<init>(AccumuloFeatureReader.scala:63)
> 
>         at
> org.locationtech.geomesa.accumulo.data.AccumuloFeatureReader
> $.apply(AccumuloFeatureReader.scala:54)
> 
>         at
> org.locationtech.geomesa.accumulo.data.AccumuloDataStore.getFeatureReader(AccumuloDataStore.scala:686)
> 
>         at
> org.locationtech.geomesa.accumulo.data.AccumuloFeatureCollection.reader(AccumuloFeatureSource.scala:150)
> 
>         at
> org.geotools.data.store.DataFeatureCollection.isEmpty(DataFeatureCollection.java:309)
> 
>         at com.nathan.geomesa.test.MyQuery.main(MyQuery.java:97)
> 
>  
> 
>  
> 
>  
> 
>  
> 
> From: geomesa-users-bounces@xxxxxxxxxxxxxxxx
> [mailto:geomesa-users-bounces@xxxxxxxxxxxxxxxx] On Behalf Of Emilio
> Lahr-Vivaz
> Sent: Monday, March 28, 2016 12:23 PM
> To: Geomesa User discussions <geomesa-users@xxxxxxxxxxxxxxxx>
> Subject: Re: [geomesa-users] Query with coordinate 0.0
> 
> 
>  
> 
> I'm guessing it's a GeoMesa issue, but to rule out GeoTools, you could
> evaluate the filter directly against your multi-polygon using the
> maven scala console:
> 
> 
>  
> 
> 
> $ mvn scala:console -pl geomesa-compute
> 
> 
>  
> 
> 
> scala> import
> org.locationtech.geomesa.utils.geotools.SimpleFeatureTypes
> 
> 
> scala> import org.locationtech.geomesa.features.ScalaSimpleFeature
> 
> 
> scala> import org.locationtech.geomesa.utils.text.WKTUtils
> 
> 
>  
> 
> 
> scala> val sft = SimpleFeatureTypes.createType("mySft",
> "the_geom:MultiPolygon")
> 
> 
> scala> val feature = new ScalaSimpleFeature("id", sft)
> 
> 
> scala> feature.setAttribute("the_geom", WKTUtils.read("put your wkt
> here"))
> 
> 
> scala> val filter =
> filterFactory.contains(filterFactory.property("the_geom"),
> filterFactory.literal(point))
> 
> 
> scala> filter.evaluate(feature)
> 
> 
>  
> 
> 
>  
> 
> 
> On Mon, 2016-03-28 at 12:11 -0600, Nathan Mercer wrote:
> 
> 
>         Hi Emilio,
>         
>          
>         
>         I should have mentioned it. Sorry.
>         
>          
>         
>         I am using Geomesa 1.2.0
>         
>          
>         
>         I cannot provide one of the multipolygons, but just to make
>         sure it is not the polygons I will try using a simple box and
>         see if the result is the same and reply back to this thread
>         with the results.
>         
>          
>         
>         Cheers,
>         
>         Nathan
>         
>          
>         
>         From: geomesa-users-bounces@xxxxxxxxxxxxxxxx
>         [mailto:geomesa-users-bounces@xxxxxxxxxxxxxxxx] On Behalf Of
>         Emilio Lahr-Vivaz
>         Sent: Monday, March 28, 2016 12:06 PM
>         To: Geomesa User discussions <geomesa-users@xxxxxxxxxxxxxxxx>
>         Subject: Re: [geomesa-users] Query with coordinate 0.0
>         
>         
>          
>         
>         Hi Nathan,
>         
>         
>          
>         
>         
>         To help narrow it down, what version of GeoMesa are you using?
>         If possible, could you provide one of the multipolygons that
>         is failing?
>         
>         
>          
>         
>         
>         Thanks,
>         
>         
>          
>         
>         
>         Emilio
>         
>         
>          
>         
>         
>         On Mon, 2016-03-28 at 11:53 -0600, Nathan Mercer wrote:
>         
>         
>                 Hi,
>                 
>                  
>                 
>                 I am trying to run a simple contains query. I want to
>                 simply check if my MultiPolygon feature contains a
>                 given Point. Or in other words that the Point is
>                 within my MultiPolygon.
>                 
>                  
>                 
>                 I am using the following code in scala:
>                 
>                  
>                 
>                 *Notes:
>                 
>                 - filterFactory is an instance of FilterFactory2
>                 
>                 - geometryAttribute is set to “the_geom” which is the
>                 geometry attribute for the MultiPolygon feature I
>                 created by ingesting from a shapefile
>                 
>                 - point is a Point object of type
>                 com.vividsolutions.jts.geom.Point
>                 
>                 - HadoopConfiguration is an alias for
>                 org.apache.hadoop.conf.Configuration
>                 
>                 - sparkContext and accumuloConfig are all set up
>                 appropriately
>                 
>                 - coverageFeature is the feature name for my
>                 MultiPolygon feature
>                 
>                 - I have also tried ! .isEmpty instead of .count > 0
>                 
>                  
>                 
>                 val filter =
>                 filterFactory.contains(filterFactory.property(geometryAttribute), filterFactory.literal(point))
>                 
>                 val iswithin = GeoMesaSpark.rdd(new
>                 HadoopConfiguration, sparkContext, accumuloConfig, new
>                 Query(coverageFeature, filter), None).count > 0
>                 
>                  
>                 
>                 This code actually works properly and gives me back
>                 the appropriate response except for one special case.
>                 This is when either the x or y (or both) coordinates
>                 of the point are 0.0
>                 
>                  
>                 
>                 Does anybody have any ideas why this would fail? And
>                 also, any ideas of how to get around it? Is this a
>                 problem with GeoTools or GeoMesa?
>                 
>                  
>                 
>                 I have been banging my head on this for a while now
>                 and cannot figure it out.
>                 
>                  
>                 
>                 Thanks,
>                 
>                  
>                 
>                 Nathan Mercer, P.Eng.
>                 
>                 Software Developer | Intermap Technologies
>                 
>                 #200-846 6th Ave. S.W., Calgary, Alberta, Canada, T2P
>                 3E5
>                 
>                 Tel. +1 403.266.0900 x217 or 403-539-2206 | Fax +1
>                 403.265.0499 | Skype nathanmercer
>                 
>                 nmercer@xxxxxxxxxxxx | www.intermap.com
>                 
>                  
>                 
>                 LinkedIn-signature-for-office.jpg
>                 
>                  
>                 
>                 CONFIDENTIALITY NOTICE - This e-mail transmission and
>                 any accompanying documents contain information
>                 belonging to the sender which may be confidential and
>                 legally privileged. This information is intended only
>                 for the use of the person to whom this e-mail
>                 transmission was sent as indicated above. If you are
>                 not the intended recipient, any disclosure, copying,
>                 distribution, or action taken in reliance on the
>                 contents of the information contained in
>                 this transmission is strictly prohibited.
>                 
>                  
>                 
>                 
>                   ­­  
>                 
>                 _______________________________________________
>                 geomesa-users mailing list
>                 geomesa-users@xxxxxxxxxxxxxxxx
>                 To change your delivery options, retrieve your password, or unsubscribe from this list, visit
>                 https://www.locationtech.org/mailman/listinfo/geomesa-users
>         
>         
>           ­­  
>         
>         _______________________________________________
>         geomesa-users mailing list
>         geomesa-users@xxxxxxxxxxxxxxxx
>         To change your delivery options, retrieve your password, or unsubscribe from this list, visit
>         https://www.locationtech.org/mailman/listinfo/geomesa-users
> 
> 
>   ­­  
> 
> 
> 
>   ­­  
> _______________________________________________
> geomesa-users mailing list
> geomesa-users@xxxxxxxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe from this list, visit
> https://www.locationtech.org/mailman/listinfo/geomesa-users




Back to the top