geo_magic 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.textile CHANGED
@@ -79,6 +79,10 @@ Lots of extra features has been added recently. For now, please check out the sp
79
79
  Most recently I have added support to filter a list of points for those who are within a radius of another point (see _select_neares_spec.rb_).
80
80
  I have also just created a Geocode adapter for _Geocode_ and _Graticule_ (see: _geocoder_spec.rb_) - This can also easily be configured for Rails.
81
81
 
82
+ h3. Create random points in Radius
83
+
84
+ @create_points_in_square@ works, but @create_points_in_circle@ is currently broken. Please help fix this ASAP ;) Thanks!
85
+
82
86
  h2. Meta magic
83
87
 
84
88
  You can also include the functionality directly into any class like this
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
data/geo_magic.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{geo_magic}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
@@ -25,7 +25,7 @@ class Array
25
25
  end
26
26
 
27
27
  def sort_by_distance
28
- self.sort_by { |item| item.dist }
28
+ self.sort_by { |item| get_dist_obj(item).dist }
29
29
  end
30
30
  end
31
31
 
@@ -37,7 +37,7 @@ module GeoMagic
37
37
  {:km => 6371, :miles => 3956, :feet => 20895592, :meters => 6371000}
38
38
  end
39
39
 
40
- def get_within dist_obj, options = {:precision => :lowest}
40
+ def get_within dist_obj, options = {:precision => :lowest}
41
41
  calc_method = get_proc(options[:precision] || :normal)
42
42
  from_loc = get_location options[:from]
43
43
 
@@ -46,7 +46,8 @@ module GeoMagic
46
46
  res = []
47
47
  spots = populate_distance(calc_method, from_loc)
48
48
  spots.sort_by_distance.select do |item|
49
- if item.dist <= dist
49
+ it = get_dist_obj(item)
50
+ if it.dist <= dist
50
51
  res << item
51
52
  else
52
53
  break
@@ -63,10 +64,19 @@ module GeoMagic
63
64
 
64
65
  protected
65
66
 
67
+ def get_dist_obj dist_obj
68
+ return dist_obj if dist_obj.respond_to? :dist
69
+ [:point, :to_point, :location].each do |loc|
70
+ return dist_obj.send(loc) if dist_obj.respond_to? loc
71
+ end
72
+ raise "Invalid Point object: a valid Point object must either be a sublclass of MapPoint or have a #point #to_point or #location method that returns a MapPoint from which can be calculated a distance"
73
+ end
74
+
66
75
  def populate_distance calc_method, from_loc
67
76
  self.map! do |item|
68
- dist_obj = calc_method.call(from_loc, item)
69
- item.dist = dist_obj.distance
77
+ dist_item = get_dist_obj(item)
78
+ dist_obj = calc_method.call(from_loc, dist_item)
79
+ dist_item.dist = dist_obj.distance
70
80
  item
71
81
  end
72
82
  end
@@ -2,6 +2,36 @@ require 'spec_helper'
2
2
  require 'geo_magic'
3
3
  require 'geo_magic/remote'
4
4
 
5
+ class Person
6
+ attr_accessor :location, :name
7
+
8
+ def initialize name, location
9
+ @name = name
10
+ @location = location
11
+ end
12
+
13
+ def to_point
14
+ location
15
+ end
16
+
17
+ class << self
18
+ def names
19
+ ['Hansi', 'Michel', 'Sandy', 'Sam', 'Thomas']
20
+ end
21
+
22
+ def random_at points
23
+ points.inject([]) do |res, point|
24
+ res << Person.new(names[rand_index], point)
25
+ res
26
+ end
27
+ end
28
+
29
+ def rand_index
30
+ rand(names.size)
31
+ end
32
+ end
33
+ end
34
+
5
35
  describe "GeoMagic closest" do
6
36
  before do
7
37
  @long1 = -104.88544
@@ -9,22 +39,29 @@ describe "GeoMagic closest" do
9
39
 
10
40
  @center_point = GeoMagic::Point.new @long1, @lat1
11
41
  @radius = @center_point.within(10.km)
12
- @points = @radius.create_points_in_circle 10
42
+ @points = @radius.create_points_in_square 10
13
43
  end
14
44
 
15
45
 
16
- it "should select the closest 3 points" do
17
- # puts "radius: #{@radius.inspect}"
18
- # puts "points: #{@points.inspect}"
19
- closest = @points.as_map_points.get_closest 3, :from => @center_point
20
- puts "3 closest points: #{closest.inspect}"
21
- end
22
-
46
+ # it "should select the closest 3 points" do
47
+ # # puts "radius: #{@radius.inspect}"
48
+ # # puts "points: #{@points.inspect}"
49
+ # closest = @points.as_map_points.get_closest 3, :from => @center_point
50
+ # puts "3 closest points: #{closest.inspect}"
51
+ # end
52
+ #
23
53
  it "should select all points within 4 km" do
24
54
  # puts "radius: #{@radius.inspect}"
25
55
  # puts "points: #{@points.inspect}"
26
56
  closest = @points.as_map_points.get_within 4.km, :from => @center_point
27
57
  puts "points within 4 km: #{closest.inspect}"
28
58
  end
29
-
59
+
60
+ it "should select all points within 4 km" do
61
+ points = @radius.create_points_in_square 4
62
+ persons = Person.random_at points
63
+
64
+ closest = persons.as_map_points.get_within 5.km, :from => @center_point
65
+ puts "Persons within 4 km: #{closest.inspect}"
66
+ end
30
67
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Kristian Mandrup
@@ -190,7 +190,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
190
  requirements:
191
191
  - - ">="
192
192
  - !ruby/object:Gem::Version
193
- hash: -3345832224946490091
193
+ hash: 27646408712887287
194
194
  segments:
195
195
  - 0
196
196
  version: "0"