File Coverage

blib/lib/Geo/Yandex/Location.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package Geo::Yandex::Location;
2              
3 1     1   6 use vars qw ($VERSION);
  1         2  
  1         57  
4             $VERSION = '0.3';
5              
6 1     1   5 use strict;
  1         2  
  1         35  
7 1     1   4 use utf8;
  1         2  
  1         5  
8 1     1   524 use XML::LibXML;
  0            
  0            
9              
10             sub new {
11             my ($class, $context, $featureMember) = @_;
12            
13             my $this = {
14             };
15            
16             bless $this, $class;
17             $this->parse($context, $featureMember);
18              
19             return $this;
20             }
21              
22             sub parse {
23             my ($this, $context, $featureMember) = @_;
24            
25             my $metadata = ${$context->findnodes('.//gml:metaDataProperty', $featureMember)}[0];
26             $this->{'kind'} = $this->get_single_value($context, './/ygeo:kind', $metadata);
27             $this->{'address'} = $this->get_single_value($context, './/ygeo:text', $metadata);
28             $this->{'country'} = $this->get_single_value($context, './/xal:CountryName', $metadata);
29             $this->{'locality'} = $this->get_single_value($context, './/xal:LocalityName', $metadata);
30             $this->{'thoroughfare'} = $this->get_single_value($context, './/xal:ThoroughfareName', $metadata);
31             $this->{'premise'} = $this->get_single_value($context, './/xal:PremiseNumber', $metadata);
32              
33             my $bound = ${$context->findnodes('.//gml:boundedBy', $featureMember)}[0];
34             $this->{'lowerCorner'} = $this->get_single_value($context, './/gml:lowerCorner', $bound);
35             $this->{'upperCorner'} = $this->get_single_value($context, './/gml:upperCorner', $bound);
36              
37             my $point = ${$context->findnodes('.//gml:Point', $featureMember)}[0];
38             $this->{'pos'} = $this->get_single_value($context, './/gml:pos', $point);
39              
40             ($this->{'longitude'}, $this->{'latitude'}) = split / /, $this->{'pos'};
41             }
42              
43             sub get_single_value {
44             my ($this, $context, $xpath, $node) = @_;
45            
46             my @children = $context->findnodes($xpath, $node);
47            
48             return @children ? $children[0]->textContent : undef;
49             }
50              
51             sub kind {
52             my $this = shift;
53            
54             return $this->{'kind'};
55             }
56              
57             sub address {
58             my $this = shift;
59            
60             return $this->{'address'};
61             }
62              
63             sub country {
64             my $this = shift;
65            
66             return $this->{'country'};
67             }
68              
69             sub locality {
70             my $this = shift;
71            
72             return $this->{'locality'};
73             }
74              
75             sub thoroughfare {
76             my $this = shift;
77            
78             return $this->{'thoroughfare'};
79             }
80              
81             sub premise {
82             my $this = shift;
83            
84             return $this->{'premise'};
85             }
86              
87             sub lowerCorner {
88             my $this = shift;
89            
90             return $this->{'lowerCorner'};
91             }
92              
93             sub upperCorner {
94             my $this = shift;
95            
96             return $this->{'upperCorner'};
97             }
98              
99             sub pos {
100             my $this = shift;
101            
102             return $this->{'pos'};
103             }
104              
105             sub longitude {
106             my $this = shift;
107            
108             return $this->{'longitude'};
109             }
110              
111             sub latitude {
112             my $this = shift;
113            
114             return $this->{'latitude'};
115             }
116              
117             1;
118              
119             __END__