Javier,

I didn't point out anything about overlapping latitudes or longitudes.  I
pointed out that your rectangle is extremely wide.  It's 359.99999999999998
degrees wide out of a maximum possibility of 360 even.  That's wide!  Wether
it crosses the dateline or not doesn't trigger the bug; its triggered by its
width being > 180 degrees, but is most severe the wider it is.  You probably
wouldn't have noticed this problem if the rect was "only" 300 degrees wide
or even a bit wider.

There's nothing special about indexing a multi-valued field with spatial,
its the same as any other Solr multi-valued field.  To split rectangles that
have a width > 180, you could write a DIH Transformer or a Solr 
UpdateRequestProcessor similarly.  Here's an example I just did:

public class SplitRectURPFactory extends FieldMutatingUpdateProcessorFactory
{

  @Override
  public UpdateRequestProcessor getInstance(SolrQueryRequest req,
                                            SolrQueryResponse rsp,
                                            UpdateRequestProcessor next) {
    return new FieldValueMutatingUpdateProcessor(getSelector(), next) {
      @Override
      protected Object mutateValue(Object src) {
        SpatialContext ctx = SpatialContext.GEO;
        Rectangle rectangle = (Rectangle) ctx.readShape((String)src);
        if (rectangle.getWidth() > 180) {
          double minX = rectangle.getMinX();
          double midX = minX + rectangle.getWidth() / 2;
          if (midX > 180)
            midX -= 180;
          double maxX = rectangle.getMaxX();
          Rectangle rect1 = ctx.makeRectangle(minX, midX,
rectangle.getMinY(),
              rectangle.getMaxY());
          Rectangle rect2 = ctx.makeRectangle(midX, maxX,
rectangle.getMinY(), rectangle.getMaxY());
          src = Arrays.asList(rect1, rect2);
        }
        return src;
      }
    };
  }
}

Of course ideally I should just go ahead and fix this bug ;-)
~ David


Javier Molina wrote
> Thanks for your reply David.
> 
> After doing more testing I found that overlapping latitudes or longitudes
> was not the issue as you point out.
> 
> The values presented are extreme but they are correct, our solution should
> allow a user to define a box in a map, a box crossing the 180 meridian is
> also valid.
> 
> I know those are very extreme (and rare) scenarios but technically still
> valid ones.
> 
> I understand your workaround and seems feasible but unfortunately I don't
> see any example on
> http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4on how to
> index a multivalued field.
> 
> Is there any other documentation that I am missing? If not could you
> please
> shed some light on the syntax to index to boxes (rectangles) on a field?
> 
> With regards to search, will an Intersects function behaviour will be OR,
> that is match any rectangle in my example on that multivalued field that
> intersects with the given area?
> 
> Thanks,
> Javier
> 
> 
> 
> 
> 
> On 22 January 2013 05:43, David Smiley (@MITRE.org) <

> DSMILEY@

> >wrote:
> 
>> Javier,
>>
>> Your minX is slightly greater than maxX, which is interpreted as a line
>> that
>> wraps nearly the entire globe.  Is that what you intended?
>>
>> If this is what you intended, then you got bitten by this unfixed bug:
>> https://issues.apache.org/jira/browse/LUCENE-4550
>> As a work-around, you could split that horizontal line into two equal
>> pieces
>> and index them as separate values for the document.
>>
>> ~ David
>>





-----
 Author: http://www.packtpub.com/apache-solr-3-enterprise-search-server/book
--
View this message in context: 
http://lucene.472066.n3.nabble.com/Spatial-Dataimport-full-import-results-in-OutOfMemory-for-a-rectangle-defining-a-line-tp4034928p4035234.html
Sent from the Solr - User mailing list archive at Nabble.com.

Reply via email to