module Geos::GoogleMaps::PolylineEncoder
Public Class Methods
decode(encoded)
click to toggle source
# File lib/geos/google_maps/polyline_encoder.rb, line 44 def decode(encoded) retval = [] index = 0 lat = 0 lng = 0 while (index < encoded.length) index, lat = decode_number(encoded, lat, index) index, lng = decode_number(encoded, lng, index) retval.push([ lng * 1e-5, lat * 1e-5]) end retval end
encode(points, level = 3)
click to toggle source
Encodes a series of points into Google's encoded polyline format. See code.google.com/apis/maps/documentation/reference.html for details, specifically GPolyline#fromEncoded and GPolygon#fromEncoded.
The level parameter is the zoom level you're encoding at. See the Google Maps API reference for details on that.
# File lib/geos/google_maps/polyline_encoder.rb, line 16 def encode(points, level = 3) if points.is_a?(Geos::LineString) points = points.coord_seq end encoded_points = String.new encoded_levels = String.new prev_lat = 0 prev_lng = 0 points.each do |p| lat_e5 = (p[1] * 1e5).floor lng_e5 = (p[0] * 1e5).floor cur_lat = lat_e5 - prev_lat cur_lng = lng_e5 - prev_lng prev_lat = lat_e5 prev_lng = lng_e5 encoded_points += encode_signed_number(cur_lat) + encode_signed_number(cur_lng) encoded_levels += encode_number(level) end { :points => encoded_points, :levels => encoded_levels } end