source: subversion/utils/planet.osm/planet.rb @ 1195

Last change on this file since 1195 was 1074, checked in by nick, 14 years ago

corrected apos again... somehow I got mixed up with local versions

  • Property svn:executable set to *
File size: 2.4 KB
Line 
1#!/usr/bin/ruby -w
2
3#require 'cgi'
4require 'osm/dao.rb'
5require 'bigdecimal'
6#include Apache
7# This should be put in the directory above the 'osm' directory containing
8# 'dao.rb' to work properly
9
10def get_kv(tags)
11        kv = {}
12        tagarray = tags.split(';')
13        tagarray.each do |kvpair|
14                kvpairarray = kvpair.split('=')
15                kv[kvpairarray[0]] = kvpairarray[1]
16        end
17        return kv
18end
19               
20def print_kv(kv)
21        kv.each do |k,v|
22                unless v==nil
23                        v1 = v.gsub(/[']/,"'") # escape quotes
24                        v2 = v1.gsub(/</,"&lt;") # escape <
25                        v3 = v2.gsub(/>/,"&gt;") # escape >
26                        puts "<tag k='#{k}' v='#{v3}' />"
27                end
28        end
29end
30
31#r = Apache.request
32#cgi = CGI.new
33
34
35#bllon, bllat, trlong, trlat = bbox.map { |elem| elem.to_f }
36
37if ARGV.length < 4
38        puts "Usage: planet.rb bllon bllat trlon trlat"
39        exit
40end
41
42bllon = ARGV[0].to_f
43bllat = ARGV[1].to_f
44trlon = ARGV[2].to_f
45trlat = ARGV[3].to_f
46
47to = nil
48#to = Time.parse(cgi['to']) unless cgi['to'] == ''
49
50if bllat > trlat || bllon > trlon
51    puts "That is not a sensible bounding box, you silly person."
52        exit
53end
54
55dao = OSM::Dao.instance
56
57nodes = dao.getnodes(trlat, bllon, bllat, trlon, to)
58
59if nodes && nodes.length > 0
60  linesegments = dao.getlines(nodes, to)
61end
62
63seg_ids = []
64
65if linesegments # get nodes we dont have yet
66  nodes_missing = []
67 
68  linesegments.each do |key, l|
69    seg_ids << key
70    nodes_missing << l.node_a_id unless nodes[l.node_a_id]
71    nodes_missing << l.node_b_id unless nodes[l.node_b_id]
72  end
73
74  nodes.merge!(dao.get_nodes_by_ids(nodes_missing, to)) unless nodes_missing.empty?
75end
76
77puts "<?xml version='1.0'?>"
78puts "<osm version='0.3'>"
79
80if nodes
81  nodes.each do |i,n|
82          #ox.add_node(n) unless !n.visible
83          unless !n.visible
84                puts "<node id='#{i}' lat='#{n.latitude}' lon='#{n.longitude}' >" 
85                kv = get_kv(n.tags)
86                print_kv(kv)
87                puts "</node>"
88          end
89  end
90end
91
92if linesegments
93  linesegments.each do |key, l|
94    if nodes[l.node_a_id].visible && nodes[l.node_b_id].visible
95      #ox.add_segment(l)
96
97          puts "<segment id='#{key}' from='#{l.node_a_id}' to='#{l.node_b_id}' >" 
98          kv = get_kv(l.tags)
99          print_kv(kv)
100          puts "</segment>"
101    end
102  end
103end
104
105[:way, :area].each do |type|
106  if seg_ids != []
107    dao.get_multis_from_segments(seg_ids, type).each do |n|
108      #ox.add_multi(n,type)
109          puts "<#{type} id='#{n.id}'>"
110          print_kv(n.tags)
111          n.segs.each do |segid|
112                puts "<seg id='#{segid}' />"
113          end
114          puts "</#{type}>"
115    end
116  end
117end
118
119puts "</osm>"
120GC.start
Note: See TracBrowser for help on using the repository browser.