I was surprised to not see PostGIS at least mentioned. I've been using PostGIS professionally for the last few years and only have good things to say, the toolchain is very mature.<p>We make pretty extensive use of R-Tree indexes in PostGIS, tables with 10,000,000+ rows and shapes that roughly match streets, parcels, blocks, zip codes. While I don't have 99th percentile data offhand average query time is <1ms. Perhaps there are slow responses at the 99th percentile however I would be very surprised by this.