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:
commit
d9e070e069
395 changed files with 2348 additions and 25020 deletions
|
@ -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
168
lib/gpx.rb
Normal 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
|
193
lib/osm.rb
193
lib/osm.rb
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue