Use QuadTiling in GPS point queries.
This commit is contained in:
parent
1fcd5f5593
commit
0423884184
3 changed files with 14 additions and 16 deletions
|
@ -63,13 +63,8 @@ class ApiController < ApplicationController
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
# integerise
|
|
||||||
min_lat = min_lat * 1000000
|
|
||||||
max_lat = max_lat * 1000000
|
|
||||||
min_lon = min_lon * 1000000
|
|
||||||
max_lon = max_lon * 1000000
|
|
||||||
# get all the points
|
# get all the points
|
||||||
points = Tracepoint.find(:all, :conditions => ['latitude BETWEEN ? AND ? AND longitude BETWEEN ? AND ?', min_lat.to_i, max_lat.to_i, min_lon.to_i, max_lon.to_i], :select => "DISTINCT *", :offset => offset, :limit => TRACEPOINTS_PER_PAGE, :order => "timestamp DESC" )
|
points = Tracepoint.find_by_area(min_lat, min_lon, max_lat, max_lon, :select => "DISTINCT *", :offset => offset, :limit => TRACEPOINTS_PER_PAGE, :order => "timestamp DESC" )
|
||||||
|
|
||||||
doc = XML::Document.new
|
doc = XML::Document.new
|
||||||
doc.encoding = 'UTF-8'
|
doc.encoding = 'UTF-8'
|
||||||
|
|
|
@ -20,10 +20,10 @@ class SwfController < ApplicationController
|
||||||
basey =params['basey'].to_f
|
basey =params['basey'].to_f
|
||||||
masterscale =params['masterscale'].to_f
|
masterscale =params['masterscale'].to_f
|
||||||
|
|
||||||
xmin=params['xmin'].to_f; xminr=xmin/0.000001
|
xmin=params['xmin'].to_f;
|
||||||
xmax=params['xmax'].to_f; xmaxr=xmax/0.000001
|
xmax=params['xmax'].to_f;
|
||||||
ymin=params['ymin'].to_f; yminr=ymin/0.000001
|
ymin=params['ymin'].to_f;
|
||||||
ymax=params['ymax'].to_f; ymaxr=ymax/0.000001
|
ymax=params['ymax'].to_f;
|
||||||
|
|
||||||
# - Begin movie
|
# - Begin movie
|
||||||
|
|
||||||
|
@ -51,16 +51,14 @@ class SwfController < ApplicationController
|
||||||
" FROM gpx_files,gps_points "+
|
" FROM gpx_files,gps_points "+
|
||||||
"WHERE gpx_files.id=gpx_id "+
|
"WHERE gpx_files.id=gpx_id "+
|
||||||
" AND gpx_files.user_id=#{user.id} "+
|
" AND gpx_files.user_id=#{user.id} "+
|
||||||
" AND (gps_points.longitude BETWEEN #{xminr} AND #{xmaxr}) "+
|
" AND "+OSM.sql_for_area(ymin,xmin,ymax,xmax)+
|
||||||
" AND (gps_points.latitude BETWEEN #{yminr} AND #{ymaxr}) "+
|
|
||||||
" AND (gps_points.timestamp IS NOT NULL) "+
|
" AND (gps_points.timestamp IS NOT NULL) "+
|
||||||
"ORDER BY fileid DESC,ts "+
|
"ORDER BY fileid DESC,ts "+
|
||||||
"LIMIT 10000"
|
"LIMIT 10000"
|
||||||
else
|
else
|
||||||
sql="SELECT latitude*0.000001 AS lat,longitude*0.000001 AS lon,gpx_id AS fileid,UNIX_TIMESTAMP(timestamp) AS ts "+
|
sql="SELECT latitude*0.000001 AS lat,longitude*0.000001 AS lon,gpx_id AS fileid,UNIX_TIMESTAMP(timestamp) AS ts "+
|
||||||
" FROM gps_points "+
|
" FROM gps_points "+
|
||||||
"WHERE (longitude BETWEEN #{xminr} AND #{xmaxr}) "+
|
"WHERE "+OSM.sql_for_area(ymin,xmin,ymax,xmax)+
|
||||||
" AND (latitude BETWEEN #{yminr} AND #{ymaxr}) "+
|
|
||||||
" AND (gps_points.timestamp IS NOT NULL) "+
|
" AND (gps_points.timestamp IS NOT NULL) "+
|
||||||
"ORDER BY fileid DESC,ts "+
|
"ORDER BY fileid DESC,ts "+
|
||||||
"LIMIT 10000"
|
"LIMIT 10000"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class Tracepoint < ActiveRecord::Base
|
class Tracepoint < ActiveRecord::Base
|
||||||
set_table_name 'gps_points'
|
set_table_name 'gps_points'
|
||||||
|
|
||||||
# validates_numericality_of :latitude
|
# validates_numericality_of :latitude
|
||||||
# validates_numericality_of :longitude
|
# validates_numericality_of :longitude
|
||||||
|
@ -7,6 +7,12 @@ set_table_name 'gps_points'
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
belongs_to :trace, :foreign_key => 'gpx_id'
|
belongs_to :trace, :foreign_key => 'gpx_id'
|
||||||
|
|
||||||
|
def self.find_by_area(minlat, minlon, maxlat, maxlon, options)
|
||||||
|
self.with_scope(:find => {:conditions => OSM.sql_for_area(minlat, minlon, maxlat, maxlon)}) do
|
||||||
|
return self.find(:all, options)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def lat=(l)
|
def lat=(l)
|
||||||
self.latitude = l * 1000000
|
self.latitude = l * 1000000
|
||||||
end
|
end
|
||||||
|
@ -29,5 +35,4 @@ set_table_name 'gps_points'
|
||||||
el1['lon'] = self.lon.to_s
|
el1['lon'] = self.lon.to_s
|
||||||
return el1
|
return el1
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue