Method: Geos::GoogleMaps::PolylineEncoder.encode
- Defined in:
- lib/geos/google_maps/polyline_encoder.rb
.encode(points, level = 3) ⇒ Object
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.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# 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 |