Skip to content

Instantly share code, notes, and snippets.

@chsh
Created January 7, 2009 08:22
Show Gist options
  • Select an option

  • Save chsh/44221 to your computer and use it in GitHub Desktop.

Select an option

Save chsh/44221 to your computer and use it in GitHub Desktop.
class LatLng
attr_reader :lat, :lng, :srid
WGS84 = 4326
SRID = WGS84
def initialize(lat, lng, srid = WGS84)
@lat = lat.to_f
@lng = lng.to_f
@srid = srid.to_i
end
def ==(target)
return false unless target.is_a? LatLng
return true if @lat == target.lat && @lng == target.lng && @srid == target.srid
false
end
def self.from_point(point)
LatLng.new(point.y, point.x, point.srid)
end
def self.from_string(point_string, srid = WGS84)
pss = point_string.strip
values = pss.split(/\s*,\s*/)
if values.size == 1
values = pss.split(/\s+/)
end
LatLng.new(values[0], values[1], srid)
end
def +(latlng)
raise "srid mismatch #{self.srid} != #{latlng.srid}" unless self.srid == latlng.srid
LatLng.new(@lat + latlng.lat, @lng + latlng.lng)
end
def -(latlng)
raise "srid mismatch #{self.srid} != #{latlng.srid}" unless self.srid == latlng.srid
LatLng.new(@lat - latlng.lat, @lng - latlng.lng)
end
def *(value)
LatLng.new(@lat * value, @lng * value)
end
def /(value)
LatLng.new(@lat / value, @lng / value)
end
def point
GeoRuby::SimpleFeatures::Point.from_x_y(@lng.to_f, @lat.to_f, @srid)
end
def as_text(opts = {})
opts.reverse_merge! :blank => true
"#{@lat},#{' ' if opts[:blank]}#{@lng}"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment