Sean Gillies wrote:
> Eric Lemoine wrote:
>> On Sat, Apr 26, 2008 at 12:52 AM, Sean Gillies <[EMAIL PROTECTED]> wrote:
>>> Eric Lemoine wrote:
>>>  > On Fri, Apr 25, 2008 at 10:55 PM, Sean Gillies <[EMAIL PROTECTED]> wrote:
>>>  >> Eric Lemoine wrote:
>>>  >>  > On Fri, Apr 25, 2008 at 10:12 PM, Eric Lemoine <[EMAIL PROTECTED]> 
>>> wrote:
>>>  >>  >> On Fri, Apr 25, 2008 at 5:56 PM, Sean Gillies <[EMAIL PROTECTED]> 
>>> wrote:
>>>  >>  >>  >  Eric,
>>>  >>  >>
>>>  >>  >>  Sean, thanks for your reply.
>>>  >>  >>
>>>  >>  >>
>>>  >>  >>  >
>>>  >>  >>  >  Try adding a breakpoint at the beginning of 
>>> BinaryPredicate.__call__ in
>>>  >>  >>  >  shapely/predicates.py to see what's up with self.context._geom 
>>> and
>>>  >>  >>  >  other._geom.
>>>  >>  >>
>>>  >>  >>  self.context._geom = -1320155896
>>>  >>  >>  other._geom = 140268432
>>>  >>  >>
>>>  >>  >>  The first value looks suspicious, doesn't it?
>>>  >>  >
>>>  >>  > FWIW, I have:
>>>  >>  >
>>>  >>  > print self.context return POINT (52.4603282421875008 
>>> -23.7364467734374998)
>>>  >>  > print other return POINT (52.4603282421875008 -23.7364467734374998)
>>>  >>  >
>>>  >>  > so it's comparing the same point, it is just that the internal _geom
>>>  >>  > value isn't interpretable by geos for the self.context object.
>>>  >>  >
>>>  >>  > --
>>>  >>  > Eric
>>>  >>
>>>  >>  Is self.context the geometry in the session or is it the persisted
>>>  >>  geometry? If it's the persisted geometry, maybe what we're comparing is
>>>  >>  a cache or memoization?
>>>  >
>>>  > At this point I've no answer to these questions. Sorry.
>>>  >
>>>  > One other thing I've noticed: the two compared objects have different
>>>  > values for the _geom property (see above); however they have the same
>>>  > value for the __geom (_PointAdapter__geom really). Is this mismatch
>>>  > expected?
>>>  >
>>>  > --
>>>  > Eric
>>>
>>>  They are PointAdapters? Can you tell me more about their life cycle?
>> They are created by asShape. Client posts GeoJSON -> Server creates a
>> geojson.feature.FeatureCollection -> for each feature geometry create
>> a PointAdapter using asShape(feature.geometry)
>>
>> See following code. post() is executed on HTTP POST requests.
>>
>>     def post(self):
>>         content =
>> request.environ['wsgi.input'].read(int(request.environ['CONTENT_LENGTH']))
>>         factory = lambda ob: geojson.GeoJSON.to_instance(ob)
>>         collection = geojson.loads(content, object_hook=factory)
>>         if not isinstance(collection, geojson.feature.FeatureCollection):
>>             response.status_code = 400
>>             return
>>         for f in collection.features:
>>             geometry = asShape(f.geometry)
>>             # the most hackish thing I've ever done, get a segfault
>>             # in libgeos:GEOSEquals without this, that one's driving
>>             # me crazy
>>             #geometry.__dict__['equals'] = lambda arg: True
>>
>>             # 1.0! FIXME
>>             refugee = Refugee(1.0, geometry)
>>             model.Session.save(refugee)
>>         model.Session.commit()
>>         response.status_code = 201
>>
>>
>>
>> Thanks for your help Sean, I'm a bit desperate on that one!
>>
>> --
>> Eric
> 
> Okay, I'll dig into that tonight.
> 
> Sean

Eric,

Can you show me an traceback through SQLAlchemy where the geometry's
equals predicate is used?

Sean
_______________________________________________
Community mailing list
[email protected]
http://lists.gispython.org/mailman/listinfo/community

Reply via email to