Doing a resync from mainline 8633:10895. There was one simple to resolve conflict on app/models/node.rb. Also moving the migrations for API0.6 to new sequence numbers since there was some new migrations added to mainline, where the migration numbers would conflict if not moved.

This commit is contained in:
Shaun McDonald 2008-09-25 15:06:05 +00:00
commit d9e070e069
395 changed files with 2348 additions and 25020 deletions

View file

@ -42,15 +42,6 @@ module GeoRecord
return self.longitude.to_f / SCALE
end
# Potlatch projections
def lon_potlatch(baselong,masterscale)
(self.lon-baselong)*masterscale
end
def lat_potlatch(basey,masterscale)
-(lat2y(self.lat)-basey)*masterscale
end
private
def lat2y(a)

168
lib/gpx.rb Normal file
View file

@ -0,0 +1,168 @@
module GPX
class File
require "libxml"
include LibXML
attr_reader :possible_points
attr_reader :actual_points
attr_reader :tracksegs
def initialize(file)
@file = file
end
def points
@possible_points = 0
@actual_points = 0
@tracksegs = 0
@file.rewind
reader = XML::Reader.io(@file)
point = nil
while reader.read > 0
if reader.node_type == XML::Reader::TYPE_ELEMENT
if reader.name == "trkpt"
point = TrkPt.new(@tracksegs, reader["lat"].to_f, reader["lon"].to_f)
@possible_points += 1
elsif reader.name == "ele" and point
point.altitude = reader.read_string.to_f
elsif reader.name == "time" and point
point.timestamp = DateTime.parse(reader.read_string)
end
elsif reader.node_type == XML::Reader::TYPE_END_ELEMENT
if reader.name == "trkpt" and point and point.valid?
point.altitude ||= 0
yield point
@actual_points += 1
elsif reader.name == "trkseg"
@tracksegs += 1
end
end
end
end
def picture(min_lat, min_lon, max_lat, max_lon, num_points)
frames = 10
width = 250
height = 250
proj = OSM::Mercator.new(min_lat, min_lon, max_lat, max_lon, width, height)
linegc = Magick::Draw.new
linegc.stroke_linejoin('miter')
linegc.stroke_width(1)
linegc.stroke('#BBBBBB')
linegc.fill('#BBBBBB')
highlightgc = Magick::Draw.new
highlightgc.stroke_linejoin('miter')
highlightgc.stroke_width(3)
highlightgc.stroke('#000000')
highlightgc.fill('#000000')
images = []
frames.times do
image = Magick::Image.new(width, height) do |image|
image.background_color = 'white'
image.format = 'GIF'
end
images << image
end
oldpx = 0.0
oldpy = 0.0
first = true
m = 0
mm = 0
points do |p|
px = proj.x(p.longitude)
py = proj.y(p.latitude)
if m > 0
frames.times do |n|
if n == mm
gc = highlightgc.dup
else
gc = linegc.dup
end
gc.line(px, py, oldpx, oldpy)
gc.draw(images[n])
end
end
m += 1
if m > num_points.to_f / frames.to_f * (mm+1)
mm += 1
end
oldpy = py
oldpx = px
end
il = Magick::ImageList.new
images.each do |f|
il << f
end
il.delay = 50
il.format = 'GIF'
return il.to_blob
end
def icon(min_lat, min_lon, max_lat, max_lon)
width = 50
height = 50
proj = OSM::Mercator.new(min_lat, min_lon, max_lat, max_lon, width, height)
gc = Magick::Draw.new
gc.stroke_linejoin('miter')
gc.stroke_width(1)
gc.stroke('#000000')
gc.fill('#000000')
image = Magick::Image.new(width, height) do |image|
image.background_color = 'white'
image.format = 'GIF'
end
oldpx = 0.0
oldpy = 0.0
first = true
points do |p|
px = proj.x(p.longitude)
py = proj.y(p.latitude)
gc.dup.line(px, py, oldpx, oldpy).draw(image) unless first
first = false
oldpy = py
oldpx = px
end
return image.to_blob
end
end
private
class TrkPt < Struct.new(:segment, :latitude, :longitude, :altitude, :timestamp)
def valid?
self.latitude and self.longitude and self.timestamp and
self.latitude >= -90 and self.latitude <= 90 and
self.longitude >= -180 and self.longitude <= 180
end
end
end

View file

@ -93,199 +93,6 @@ module OSM
end
end
# This piece of magic reads a GPX with SAX and spits out
# lat/lng and stuff
#
# This would print every latitude value:
#
# gpx = OSM::GPXImporter.new('somefile.gpx')
# gpx.points {|p| puts p['latitude']}
class GPXImporter
# FIXME swap REXML for libXML
attr_reader :possible_points
attr_reader :actual_points
attr_reader :tracksegs
def initialize(file)
@file = file
end
def points
@possible_points = 0
@actual_points = 0
@tracksegs = 0
lat = -1
lon = -1
ele = -1
date = DateTime.now();
gotlatlon = false
gotele = false
gotdate = false
@file.rewind
parser = REXML::Parsers::SAX2Parser.new(@file)
parser.listen( :start_element, %w{ trkpt }) do |uri,localname,qname,attributes|
lat = attributes['lat'].to_f
lon = attributes['lon'].to_f
gotlatlon = true
gotele = false
gotdate = false
@possible_points += 1
end
parser.listen( :characters, %w{ ele } ) do |text|
ele = text
gotele = true
end
parser.listen( :characters, %w{ time } ) do |text|
if text && text != ''
begin
date = DateTime.parse(text)
gotdate = true
rescue
end
end
end
parser.listen( :end_element, %w{ trkseg } ) do |uri, localname, qname|
@tracksegs += 1
end
parser.listen( :end_element, %w{ trkpt } ) do |uri,localname,qname|
if gotlatlon && gotdate
ele = '0' unless gotele
if lat < 90 && lat > -90 && lon > -180 && lon < 180
@actual_points += 1
yield Hash['latitude' => lat, 'longitude' => lon, 'timestamp' => date, 'altitude' => ele, 'segment' => @tracksegs]
end
end
gotlatlon = false
gotele = false
gotdate = false
end
parser.parse
end
def get_picture(min_lat, min_lon, max_lat, max_lon, num_points)
#puts "getting picfor bbox #{min_lat},#{min_lon} - #{max_lat},#{max_lon}"
frames = 10
width = 250
height = 250
proj = OSM::Mercator.new(min_lat, min_lon, max_lat, max_lon, width, height)
linegc = Magick::Draw.new
linegc.stroke_linejoin('miter')
linegc.stroke_width(1)
linegc.stroke('#BBBBBB')
linegc.fill('#BBBBBB')
highlightgc = Magick::Draw.new
highlightgc.stroke_linejoin('miter')
highlightgc.stroke_width(3)
highlightgc.stroke('#000000')
highlightgc.fill('#000000')
images = []
frames.times do
image = Magick::Image.new(width, height) do |image|
image.background_color = 'white'
image.format = 'GIF'
end
images << image
end
oldpx = 0.0
oldpy = 0.0
first = true
m = 0
mm = 0
points do |p|
px = proj.x(p['longitude'])
py = proj.y(p['latitude'])
if m > 0
frames.times do |n|
if n == mm
gc = highlightgc.dup
else
gc = linegc.dup
end
gc.line(px, py, oldpx, oldpy)
gc.draw(images[n])
end
end
m += 1
if m > num_points.to_f / frames.to_f * (mm+1)
mm += 1
end
oldpy = py
oldpx = px
end
il = Magick::ImageList.new
images.each do |f|
il << f
end
il.delay = 50
il.format = 'GIF'
return il.to_blob
end
def get_icon(min_lat, min_lon, max_lat, max_lon)
#puts "getting icon for bbox #{min_lat},#{min_lon} - #{max_lat},#{max_lon}"
width = 50
height = 50
proj = OSM::Mercator.new(min_lat, min_lon, max_lat, max_lon, width, height)
gc = Magick::Draw.new
gc.stroke_linejoin('miter')
gc.stroke_width(1)
gc.stroke('#000000')
gc.fill('#000000')
image = Magick::Image.new(width, height) do |image|
image.background_color = 'white'
image.format = 'GIF'
end
oldpx = 0.0
oldpy = 0.0
first = true
points do |p|
px = proj.x(p['longitude'])
py = proj.y(p['latitude'])
gc.dup.line(px, py, oldpx, oldpy).draw(image) unless first
first = false
oldpy = py
oldpx = px
end
return image.to_blob
end
end
class GreatCircle
include Math

View file

@ -83,7 +83,7 @@ module Potlatch
when 'Hash'
a=3.chr
n.each do |k,v|
a+=encodestring(k)+encodevalue(v)
a+=encodestring(k.to_s)+encodevalue(v)
end
a+0.chr+0.chr+9.chr
when 'String'
@ -195,7 +195,10 @@ module Potlatch
}
end
[presets,presetmenus,presetnames,colours,casing,areas,autotags,relcolours,relalphas,relwidths]
# Read internationalisation
localised = YAML::load(File.open("#{RAILS_ROOT}/config/potlatch/localised.yaml"))
[presets,presetmenus,presetnames,colours,casing,areas,autotags,relcolours,relalphas,relwidths,localised]
end
end