[ https://issues.apache.org/jira/browse/SIS45?page=com.atlassian.jira.plugin.system.issuetabpanels:commenttabpanel&focusedCommentId=13257774#comment13257774
]
Peter Karich edited comment on SIS45 at 3/7/13 8:41 PM:

Now I understand why the time is always the same ... because searchRegion is calculated wrong.
It should somehow depend on the radius which will again improve query time a lot!
In my own quadtree implementation https://github.com/graphhopper/ I have this:
{code}
public BBox createBBox(double lat, double lon, double radiusInKm) {
if (radiusInKm <= 0)
throw new IllegalArgumentException("Distance cannot be 0 or negative! " + radiusInKm
+ " lat,lon:" + lat + "," + lon);
// length of a circle at specified lat / dist
double dLon = (360 / (calcCircumference(lat) / radiusInKm));
// length of a circle is independent of the longitude
double dLat = (360 / (CalcDistance.C / radiusInKm));
// Now return bounding box in coordinates
return new BBox(lat + dLat, lon  dLon, lat  dLat, lon + dLon);
}
{code}
but it is not copy and pastable due to different bounding box definitions
was (Author: peathal):
Now I understand why the time is always the same ... because searchRegion is calculated
wrong. It should somehow depend on the radius which will again improve query time a lot!
In my own quadtree implementation (http://karussell.github.com/GraphHopper/) I have this:
{code}
public BBox createBBox(double lat, double lon, double radiusInKm) {
if (radiusInKm <= 0)
throw new IllegalArgumentException("Distance cannot be 0 or negative! " + radiusInKm
+ " lat,lon:" + lat + "," + lon);
// length of a circle at specified lat / dist
double dLon = (360 / (calcCircumference(lat) / radiusInKm));
// length of a circle is independent of the longitude
double dLat = (360 / (CalcDistance.C / radiusInKm));
// Now return bounding box in coordinates
return new BBox(lat + dLat, lon  dLon, lat  dLat, lon + dLon);
}
{code}
but it is not copy and pastable due to different bounding box definitions
> Performance improvement of queryByPointRadius
> 
>
> Key: SIS45
> URL: https://issues.apache.org/jira/browse/SIS45
> Project: Spatial Information Systems
> Issue Type: Improvement
> Components: distance functions
> Reporter: Peter Karich
> Assignee: Chris A. Mattmann
> Fix For: 0.3
>
>
> If I didn't make a mistake a search with the normal distance method took ~2.4s and with
this distance method it takes only about 0.7s:
> {code}
> public static double getHaversineDistance(double fromLat, double fromLon, double toLat,
double toLon) {
> double dLat = Math.toRadians(toLat  fromLat);
> double dLon = Math.toRadians(toLon  fromLon);
> double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
> + Math.cos(Math.toRadians(fromLat)) * Math.cos(Math.toRadians(toLat))
* Math.sin(dLon / 2) * Math.sin(dLon / 2);
> return EARTH_RADIUS * 2 * Math.asin(Math.sqrt(a));
> }
> {code}
> Also one should think about normalizing the distance before the search so that one does
not need the whole last line which should give further speed improvements.
> I'm still unsure why it takes roughly the same time in my example for 10km, 20km and
40kmm where at every step a lot more nodes are involved. Normally I would say the mode nodes
 the more comparisons it'll take and the slower it should get. But it doesn't. Probably I'm
measuring wrong?

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
