[OSM-dev] Map rendering code... API or database direct?

Lars Aronsson lars at aronsson.se
Fri Mar 31 06:37:13 BST 2006


Raphaël wrote:

> > SELECT id,path FROM segments WHERE
> > ((xmin BETWEEN $bbox_xmin AND $bbox_xmax) OR
> > (xmax BETWEEN $bbox_xmin AND $bbox_xmax) OR
> > (xmin<$bbox_xmin AND xmax>$bbox_xmax)) AND
> > ((ymin BETWEEN $bbox_ymin AND $bbox_ymax) OR
> > (ymax BETWEEN $bbox_ymin AND $bbox_ymax) OR
> > (ymin<$bbox_ymin AND ymax>$bbox_ymax))
> > 
> > where xmin, xmax, ymin and ymax are the bounding box of each segment, and
> > $bbox_xmin, $bbox_xmax etc. are the bounding box of the current map view
> > (tile).
> 
> with postgresql 8.1 (that includes the postgis geometric objects), it's even
> easier :D
> 
> SELECT * FROM segments WHERE
> ( point_a @ box('(x1,y1),(x2,y2)') ) OR
> ( point_b @ box('(x1,y1),(x2,y2)') )


I don't think that is an equivalent solution.  Both A and B can be 
outside the tile, with the line segment still passing across the 
tile.  What the previous example tests is whether the bounding box 
around A and B, box(point_a, point_b), overlaps with the tile.
This could be elegantly formulated with PostgreSQL, but not the 
way you did.

         + - - A   bounding box of line segment A-B
         .   / .
         .+-----------+  tile
         .|/ overlap  |
         B|- - +      |
          |           |
          +-----------+

At my local university bookstore, there are now several books with 
basic algorithms for computer game design that are useful here.


-- 
  Lars Aronsson (lars at aronsson.se)
  Aronsson Datateknik - http://aronsson.se




More information about the dev mailing list