ruby-opengeodb 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ == 0.0.2 2007-07-28
2
+
3
+ * 1 major enhancement:
4
+ * neue Methode distance_lat_lot
5
+ * mehr Beispielcode
6
+
1
7
  == 0.0.1 2007-07-27
2
8
 
3
9
  * 1 major enhancement:
data/Manifest.txt CHANGED
@@ -5,6 +5,7 @@ README.txt
5
5
  Rakefile
6
6
  examples/example1.rb
7
7
  examples/example2.rb
8
+ examples/where_is_the_geocache.rb
8
9
  lib/ruby-opengeodb.rb
9
10
  lib/ruby-opengeodb/version.rb
10
11
  lib/ruby-opengeodb/location.rb
data/examples/example2.rb CHANGED
@@ -6,15 +6,22 @@ Location.db_connect
6
6
 
7
7
  # Achtung: die Laengen- und Breitengrade geben die ungefaehre Mitte des PLZ-Bereichs an und koennen leicht von den eigenen Koordinaten abweichen, wenn man in diesem PLZ-Gebiet wohnt.
8
8
 
9
- nr=1
10
- while nr<=99999
11
- plz=sprintf("%05d",nr)
12
- # puts plz
9
+ berlin = Location.new("13359")
10
+
11
+ found = 0
12
+ 1.upto(99999) do |nr|
13
+ plz = sprintf("%05d",nr)
14
+ # puts plz
13
15
  begin
14
16
  location = Location.new(plz)
15
- puts "PLZ: #{plz} Ort: #{location.ort} Lat: #{location.lat} Lon: #{location.lon}"
17
+ # puts "PLZ: #{plz} Ort: #{location.ort} Lat: #{location.lat} Lon: #{location.lon}"
18
+ if berlin.distance(location) <= 800
19
+ puts "PLZ: #{plz}\tEntfernung zu mir: #{berlin.distance(location).to_i} km\tOrt: #{location.ort} Lat: #{location.lat} Lon: #{location.lon}"
20
+ found += 1
21
+ end
16
22
  rescue
17
23
  # keine PLZ in Datenbank vorhanden => ignorieren und weitermachen
18
24
  end
19
- nr += 1
20
25
  end
26
+
27
+ puts "#{found} Staedte gefunden"
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Skript: where_is_the_geocache.rb
4
+ # wo ist ein Geocache?
5
+ # sucht anhand der Koordinaten die PLZ bzw. Stadt heraus
6
+ # aus dem ruby-opengeodb Projekt: http://ruby-opengeodb.rubyforge.org/
7
+ # Autor: Thomas Preymesser (thopre@gmail.com)
8
+
9
+ require 'rubygems'
10
+ require 'ruby-opengeodb'
11
+
12
+ PLZ_START = 60000
13
+ PLZ_END = 59999
14
+
15
+ Location.db_connect
16
+
17
+ def list(a,lat,lon)
18
+ puts "Entfernung in km (zu lat: #{lat} lon: #{lon}) PLZ Ort"
19
+ puts "-"*60
20
+ 0.upto(9) do |i|
21
+ print a[i][0].to_s + " "
22
+ if a[i][1].class == String
23
+ print "--"
24
+ else
25
+ print a[i][1].plz + " "
26
+ begin
27
+ print a[i][1].ort
28
+ rescue
29
+ print "--"
30
+ end
31
+ end
32
+ puts
33
+ end
34
+ puts
35
+ end
36
+
37
+ if ARGV.size < 2
38
+ puts "usage: #{$0} <lat> <lon>"
39
+ raise ArgumentError
40
+ end
41
+
42
+ lat=ARGV[0].to_f
43
+ lon=ARGV[1].to_f
44
+ result = [
45
+ [999999,"VOID"],
46
+ [999999,"VOID"],
47
+ [999999,"VOID"],
48
+ [999999,"VOID"],
49
+ [999999,"VOID"],
50
+ [999999,"VOID"],
51
+ [999999,"VOID"],
52
+ [999999,"VOID"],
53
+ [999999,"VOID"],
54
+ [999999,"VOID"],
55
+ ]
56
+
57
+ nr = PLZ_START
58
+ while true do
59
+ plz = sprintf("%05d",nr)
60
+ begin
61
+ location = Location.new(plz)
62
+ valid_plz = true
63
+ rescue
64
+ valid_plz = false
65
+ end
66
+ if valid_plz
67
+ distance = location.distance_lat_lon(lat,lon)
68
+ result[10] = [distance,location]
69
+ if result.sort != result
70
+ result.sort!
71
+ list(result,lat,lon)
72
+ end
73
+ end
74
+ nr += 1
75
+ if nr > 99999
76
+ nr = 0
77
+ end
78
+ if nr == PLZ_END
79
+ break;
80
+ end
81
+ end
82
+
83
+ print "RETURN druecken zum Beenden"
84
+ ans=gets
@@ -20,7 +20,33 @@ class Changelog < ActiveRecord::Base
20
20
  end
21
21
  end # class
22
22
 
23
- class Location
23
+ class Typename < ActiveRecord::Base
24
+ set_table_name "geodb_type_names"
25
+
26
+ def type_id(type)
27
+ case type
28
+ when :postleitzahl,:plz
29
+ typename = Typename.find(:first, :conditions => "name = 'Postleitzahl' AND type_locale = 'de'")
30
+ when :postleitzahlgebiet
31
+ typename = Typename.find(:first, :conditions => "name = 'Postleitzahlgebiet' AND type_locale = 'de'")
32
+ when :kfz_kennzeichen
33
+ typename = Typename.find(:first, :conditions => "name = 'KFZ-Kennzeichen' AND type_locale = 'de'")
34
+ when :kanton
35
+ typename = Typename.find(:first, :conditions => "name = 'Kanton' AND type_locale = 'de_CH'")
36
+ else
37
+ raise 'invalid type: '+type.to_s
38
+ end
39
+ return typename.attributes['type_id']
40
+ end
41
+
42
+ def name_for(type_no)
43
+ rec = Typename.find(:first, :conditions => "type_id = #{type_no}")
44
+ rec.attributes['name']
45
+ end
46
+ end # class
47
+
48
+ class Location < ActiveRecord::Base
49
+ set_table_name "geodb_locations"
24
50
 
25
51
  attr_reader :plz
26
52
 
@@ -51,6 +77,10 @@ class Location
51
77
  @lon
52
78
  end
53
79
 
80
+ def Location.all
81
+ Location.find(:all)
82
+ end
83
+
54
84
  private
55
85
  def Location.to_deg(rad)
56
86
  rad/0.0174532
@@ -61,6 +91,16 @@ private
61
91
  end
62
92
 
63
93
  public
94
+ def distance_lat_lon(lat,lon)
95
+ result = Math.acos(
96
+ (Math.sin(Location.to_rad(self.lat)) * Math.sin(Location.to_rad(lat))) + (Math.cos(Location.to_rad(self.lat)) *
97
+ Math.cos(Location.to_rad(lat)) *
98
+ Math.cos(Location.to_rad(self.lon) - Location.to_rad(lon)))) * 6371.0
99
+
100
+ result
101
+ end
102
+
103
+ #TODO: hier distance_lat_lon rufen?
64
104
  def distance(other)
65
105
  unless other.kind_of?(Location)
66
106
  raise ArgumentError, "Argument ist keine 'Location'"
@@ -2,7 +2,7 @@ module RubyOpengeodb #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -56,7 +56,11 @@ class TestRubyOpengeodb < Test::Unit::TestCase
56
56
  assert_in_delta 0.0, lu.distance(lu), 0.001
57
57
  assert_in_delta 487.2, b.distance(lu), 0.1
58
58
  assert_in_delta 487.2, lu.distance(b), 0.1
59
+ end
59
60
 
61
+ def test_distance_lat_lon
62
+ b = Location.new("13359") # ich in Berlin
63
+ assert_in_delta 369.6, b.distance_lat_lon(50.0, 10.0), 0.1
60
64
  end
61
65
 
62
66
  def test_changelog
@@ -79,4 +83,40 @@ class TestRubyOpengeodb < Test::Unit::TestCase
79
83
  }
80
84
  end
81
85
 
86
+ def test_typenames
87
+ typenames = Typename.new
88
+ assert_equal 500300000, typenames.type_id(:postleitzahl)
89
+ assert_equal 500300000, typenames.type_id(:plz)
90
+ assert_raise (RuntimeError) {
91
+ typenames.type_id(:unbekannt)
92
+ }
93
+ assert_equal 100800000, typenames.type_id(:postleitzahlgebiet)
94
+ assert_equal 500500000, typenames.type_id(:kfz_kennzeichen)
95
+ end
96
+
97
+ def test_typenames_name
98
+ typenames = Typename.new
99
+ kanton = typenames.type_id(:kanton)
100
+ assert_equal "Kanton", typenames.name_for(kanton)
101
+ end
102
+
103
+ def DONT_test_all_locations_table
104
+ # durch alle locations-Tabelle eintraege und anzeigen,
105
+ # was sie bedeuten
106
+ locations = Location.all
107
+ typenames = Typename.new
108
+ count = 0
109
+ locations.each {|loc|
110
+ print "loc_id: " + loc.loc_id.to_s
111
+ print " #{loc.loc_type} = " + typenames.name_for(loc.loc_type)
112
+ puts
113
+ count += 1
114
+ }
115
+ assert_equal 29949, count # TODO: Anzahl kann sich natuerlich bei neueren Versionen der Datenbank aendert
116
+ end
117
+
118
+ def DONT_test_namenssuche
119
+ assert_equal 42, name_like("%Holle%")
120
+ end
121
+
82
122
  end
data/website/index.html CHANGED
@@ -33,7 +33,7 @@
33
33
  <h1>ruby opengeodb</h1>
34
34
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/ruby-opengeodb"; return false'>
35
35
  <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/ruby-opengeodb" class="numbers">0.0.1</a>
36
+ <a href="http://rubyforge.org/projects/ruby-opengeodb" class="numbers">0.0.2</a>
37
37
  </div>
38
38
  <h1>&#x2192; &#8216;ruby-opengeodb&#8217;</h1>
39
39
 
@@ -44,18 +44,18 @@
44
44
  <p>Dieses Gem erlaubt den Zugriff auf eine OpenGeoDB Datenbank um Geoinformationen daraus zu ermitteln (z.B. <span class="caps">GPS</span>-Daten zu einer <span class="caps">PLZ</span>) oder Entfernungsberechnung.</p>
45
45
 
46
46
 
47
- <p>ruby-opengeodb kann verwendet werden, um die Laengen- und Breitengrade zu einem
47
+ <p>Ruby-opengeodb kann verwendet werden, um die L&auml;ngen- und Breitengrade zu einem
48
48
  Ort zu ermitteln um diesen zum Beispiel auf einer generierten Landkarte anzuzeigen. Es kann zur Entfernungsberechnung verwendet werden: z.B. Suche von Personen oder Objekten, Veranstaltungen, etc. in einem definierten Umkreis.
49
- Eine weitere Verwendungsmoeglichkeit waeren Location-Based-Services, bei dem
49
+ Eine weitere Verwendungsmoeglichkeit w&auml;ren Location-Based-Services, bei dem
50
50
  z.B. allen Besuchern im Umkreis von 30 km ein bestimmtes Werbebanner eingeblendet wird.</p>
51
51
 
52
52
 
53
- <p>OpenGeoDB ist ein Projekt, welches freie Geoinformationen (hauptsaechlich fuer Deutschland, Oesterreich und die Schweiz) zusammengetragen und in einer flexiblen Datenbankstruktur mit vielen Moeglichkeiten zur Abfrage zur Verfuegung stellt.</p>
53
+ <p>OpenGeoDB ist ein Projekt, welches freie Geoinformationen (haupts&auml;chlich f&uuml;r Deutschland, Oesterreich und die Schweiz) zusammengetragen und in einer flexiblen Datenbankstruktur mit vielen Moeglichkeiten zur Abfrage zur Verf&uuml;gung stellt.</p>
54
54
 
55
55
 
56
56
  <p>Ich habe mit diesem Projekt selbst nichts zu tun &#8211; deshalb werde ich auch
57
57
  keinen (kostenlosen) Support zum korrekten Einrichten dieser Datenbank oder
58
- anderer Fragen, die damit zusammenhaengen, leisten. Fuer diesbezuegliche
58
+ anderer Fragen, die damit zusammenh&auml;ngen, leisten. F&uuml;r diesbez&uuml;gliche
59
59
  Probleme: <a href="http://www.google.com/search?q=opengeodb&#38;ie=utf-8&#38;oe=utf-8&#38;aq=t">OpenGeoDB</a></p>
60
60
 
61
61
 
@@ -67,8 +67,8 @@ Probleme: <a href="http://www.google.com/search?q=opengeodb&#38;ie=utf-8&#38;oe=
67
67
  <h2>The basics</h2>
68
68
 
69
69
 
70
- <p>Da ich mit Test-Driven-Development (TDD) arbeite, sollten fuer jede Funktion
71
- dieses Gems in den mitgelieferten Testfaellen ein Beispiel zur Verwendung
70
+ <p>Da ich mit Test-Driven-Development (TDD) arbeite, sollten f&uuml;r jede Funktion
71
+ dieses Gems in den mitgelieferten Testf&auml;llen ein Beispiel zur Verwendung
72
72
  enthalten sein.</p>
73
73
 
74
74
 
@@ -113,16 +113,20 @@ puts "Entfernung: " + ludwigshafen.distance(berlin).to_s + " km"
113
113
  # zur Kontrolle, der umgekehrte Weg muss (zumindest in diesem Universum) gleich lang sein
114
114
 
115
115
  puts "Entfernung: " + berlin.distance(ludwigshafen).to_s + " km"
116
+
117
+ # Eine Distanz kann auch zu einer definierten Koordinate berechnet werden
118
+
119
+ puts "Entfernung: " + berlin.distance_lat_lon(50.0, 10.0).to_s + " km"
116
120
  </code>
117
121
  </pre>
118
122
 
119
- <p>Dies ist noch eine ziemlich rudimentaer Form dieses Gems &#8211; weitere Funktionen
123
+ <p>Dies ist noch eine ziemlich rudiment&auml;re Form dieses Gems &#8211; weitere Funktionen
120
124
  werden noch eingebaut.</p>
121
125
 
122
126
 
123
- <p>Die Methode Changelog#changelogs gibt ein Array mit den Datensaetzen zurueck,
124
- die beschreiben, was an der Datenbank zuletzt geaendert wurde. Keine Anwendungs
125
- methode im eigenlichen Sinne, kann aber ganz nuetzlich sein, wenn man wissen will, welcher Version verwendet wird, ob bestimmte Aenderungen auch in der Version der Datenbank, die man selbst abfragt, schon eingeflossen sind.</p>
127
+ <p>Die Methode Changelog#changelogs gibt ein Array mit den Datens&auml;tzen zur&uuml;ck,
128
+ die beschreiben, was an der Datenbank zuletzt ge&auml;ndert wurde. Keine Anwendungs
129
+ methode im eigenlichen Sinne, kann aber ganz n&uuml;tzlich sein, wenn man wissen will, welcher Version verwendet wird, ob bestimmte Aenderungen auch in der Version der Datenbank, die man selbst abfragt, schon eingeflossen sind.</p>
126
130
 
127
131
 
128
132
  <p>Was wollt ihr unbedingt noch haben &#8211; schreibt mir an die untenstehende eMail-Adresse!</p>
@@ -157,7 +161,7 @@ methode im eigenlichen Sinne, kann aber ganz nuetzlich sein, wenn man wissen wil
157
161
 
158
162
  <p>Comments are welcome. Send an email to <a href="mailto:thopre@gmail.com">Thomas Preymesser</a>.</p>
159
163
  <p class="coda">
160
- <a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 27th July 2007<br>
164
+ <a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 28th July 2007<br>
161
165
  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
162
166
  </p>
163
167
  </div>
data/website/index.txt CHANGED
@@ -7,16 +7,16 @@ h2. What
7
7
 
8
8
  Dieses Gem erlaubt den Zugriff auf eine OpenGeoDB Datenbank um Geoinformationen daraus zu ermitteln (z.B. GPS-Daten zu einer PLZ) oder Entfernungsberechnung.
9
9
 
10
- ruby-opengeodb kann verwendet werden, um die Laengen- und Breitengrade zu einem
10
+ Ruby-opengeodb kann verwendet werden, um die L&auml;ngen- und Breitengrade zu einem
11
11
  Ort zu ermitteln um diesen zum Beispiel auf einer generierten Landkarte anzuzeigen. Es kann zur Entfernungsberechnung verwendet werden: z.B. Suche von Personen oder Objekten, Veranstaltungen, etc. in einem definierten Umkreis.
12
- Eine weitere Verwendungsmoeglichkeit waeren Location-Based-Services, bei dem
12
+ Eine weitere Verwendungsmoeglichkeit w&auml;ren Location-Based-Services, bei dem
13
13
  z.B. allen Besuchern im Umkreis von 30 km ein bestimmtes Werbebanner eingeblendet wird.
14
14
 
15
- OpenGeoDB ist ein Projekt, welches freie Geoinformationen (hauptsaechlich fuer Deutschland, Oesterreich und die Schweiz) zusammengetragen und in einer flexiblen Datenbankstruktur mit vielen Moeglichkeiten zur Abfrage zur Verfuegung stellt.
15
+ OpenGeoDB ist ein Projekt, welches freie Geoinformationen (haupts&auml;chlich f&uuml;r Deutschland, Oesterreich und die Schweiz) zusammengetragen und in einer flexiblen Datenbankstruktur mit vielen Moeglichkeiten zur Abfrage zur Verf&uuml;gung stellt.
16
16
 
17
17
  Ich habe mit diesem Projekt selbst nichts zu tun - deshalb werde ich auch
18
18
  keinen (kostenlosen) Support zum korrekten Einrichten dieser Datenbank oder
19
- anderer Fragen, die damit zusammenhaengen, leisten. Fuer diesbezuegliche
19
+ anderer Fragen, die damit zusammenh&auml;ngen, leisten. F&uuml;r diesbez&uuml;gliche
20
20
  Probleme: "OpenGeoDB":http://www.google.com/search?q=opengeodb&ie=utf-8&oe=utf-8&aq=t
21
21
 
22
22
  h2. Installing
@@ -25,8 +25,8 @@ h2. Installing
25
25
 
26
26
  h2. The basics
27
27
 
28
- Da ich mit Test-Driven-Development (TDD) arbeite, sollten fuer jede Funktion
29
- dieses Gems in den mitgelieferten Testfaellen ein Beispiel zur Verwendung
28
+ Da ich mit Test-Driven-Development (TDD) arbeite, sollten f&uuml;r jede Funktion
29
+ dieses Gems in den mitgelieferten Testf&auml;llen ein Beispiel zur Verwendung
30
30
  enthalten sein.
31
31
 
32
32
 
@@ -70,15 +70,20 @@ puts "Entfernung: " + ludwigshafen.distance(berlin).to_s + " km"
70
70
  # zur Kontrolle, der umgekehrte Weg muss (zumindest in diesem Universum) gleich lang sein
71
71
 
72
72
  puts "Entfernung: " + berlin.distance(ludwigshafen).to_s + " km"
73
+
74
+ # Eine Distanz kann auch zu einer definierten Koordinate berechnet werden
75
+
76
+
77
+ puts "Entfernung: " + berlin.distance_lat_lon(50.0, 10.0).to_s + " km"
73
78
  </code>
74
79
  </pre>
75
80
 
76
- Dies ist noch eine ziemlich rudimentaer Form dieses Gems - weitere Funktionen
81
+ Dies ist noch eine ziemlich rudiment&auml;re Form dieses Gems - weitere Funktionen
77
82
  werden noch eingebaut.
78
83
 
79
- Die Methode Changelog#changelogs gibt ein Array mit den Datensaetzen zurueck,
80
- die beschreiben, was an der Datenbank zuletzt geaendert wurde. Keine Anwendungs
81
- methode im eigenlichen Sinne, kann aber ganz nuetzlich sein, wenn man wissen will, welcher Version verwendet wird, ob bestimmte Aenderungen auch in der Version der Datenbank, die man selbst abfragt, schon eingeflossen sind.
84
+ Die Methode Changelog#changelogs gibt ein Array mit den Datens&auml;tzen zur&uuml;ck,
85
+ die beschreiben, was an der Datenbank zuletzt ge&auml;ndert wurde. Keine Anwendungs
86
+ methode im eigenlichen Sinne, kann aber ganz n&uuml;tzlich sein, wenn man wissen will, welcher Version verwendet wird, ob bestimmte Aenderungen auch in der Version der Datenbank, die man selbst abfragt, schon eingeflossen sind.
82
87
 
83
88
  Was wollt ihr unbedingt noch haben - schreibt mir an die untenstehende eMail-Adresse!
84
89
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: ruby-opengeodb
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2007-07-27 00:00:00 +02:00
6
+ version: 0.0.2
7
+ date: 2007-07-28 00:00:00 +02:00
8
8
  summary: access to opengeodb Database
9
9
  require_paths:
10
10
  - lib
@@ -36,6 +36,7 @@ files:
36
36
  - Rakefile
37
37
  - examples/example1.rb
38
38
  - examples/example2.rb
39
+ - examples/where_is_the_geocache.rb
39
40
  - lib/ruby-opengeodb.rb
40
41
  - lib/ruby-opengeodb/version.rb
41
42
  - lib/ruby-opengeodb/location.rb