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
_______________________________________________
Community mailing list
[email protected]
http://lists.gispython.org/mailman/listinfo/community

Reply via email to