On Thu, Jul 14, 2011 at 2:59 PM, Howard Butler <[email protected]> wrote:
>
>
> On Jul 14, 2011, at 2:30 PM, Sean Gillies <[email protected]> wrote:
>
>> On Wed, Jul 13, 2011 at 9:42 AM, Howard Butler <[email protected]> wrote:
>>>
>>> On Jul 13, 2011, at 10:34 AM, Sean Gillies wrote:
>>>
>>>> On Wed, Jul 13, 2011 at 12:09 AM, Christian Ledermann
>>>> <[email protected]> wrote:
>>>>> I discovered a bug in rtree:
>>>>>
>>>>>>>> from rtree import Rtree
>>>>>>>> tree = Rtree()
>>>>>>>> bounds = [0,0,1,1]
>>>>>>>> tree.add(1,bounds)
>>>>>>>> list(tree.intersection(bounds))
>>>>> [1L]
>>>>>>>> tree.add(-1288508995,bounds)
>>>>>>>> list(tree.intersection(bounds))
>>>>> [1L, 18446744072421042621L]
>>>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> Hi Christian,
>>>>
>>>> Libspatialindex uses unsigned longs and we've failed to document this
>>>> properly. If you are hashing objects to make integer ids, you'll need
>>>> to shift the values to be > 0.
>>>>
>>>
>>> Sean,
>>>
>>> This is my mistake in the libspatialindex API.
>>>
>>> I see this in the SpatialIndex.h header:
>>>
>>> typedef int64_t id_type;
>>>
>>> but for some reason, I used uint64_t's for the ids and the compiler didn't 
>>> warn us about that.
>>>
>>> /me wonders how to/if to fix this gracefully.
>>>
>>
>> Let's do fix this. Rtree users wouldn't notice the difference. How
>> many other users of the C API are there? I think I've seen more
>> questions about the C++ classes. Could we make a new C interface with
>> uint64_t shims for backwards compatibility, or is that too ugly?
>
> We should rip the Bandaid off earlier rather than later. We should ask on the 
> libspatialindex list if anyone is even using the C API other than us to hear 
> what the impact might be. If no one speaks up, I'll just fix it.
>
> Howard

I can confirm that with commits

https://github.com/Rtree/Rtree/commit/415ab33f26c1e2960d5c58b9471e0186dd102a4e
https://github.com/libspatialindex/libspatialindex/commit/787128ab5c7b00203efc10a08138ae0a39ce99ec

the Rtree tests pass and negative index values are working:

>> from rtree import Rtree
>>> tree = Rtree()
>>> tree.add(-1, (0,0))
x3b2e68>
>>> list(tree.intersection((0, 0)))
[-1L]

Christian, can you try it out?

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

Reply via email to