source: subversion/sites/other/freemap/common/Map.php @ 8877

Last change on this file since 8877 was 5579, checked in by nick, 12 years ago

add updated freemap

File size: 2.5 KB
Line 
1<?php
2class Map
3{
4        var $bottomleft, 
5                $topright,
6                $nscale, // pixels per nitude unit
7                $escale, // pixels per eitude unit
8                $width, // pixels
9                $height; // pixels
10
11        function Map ($w, $s, $e, $n, $width, $height)
12        {
13                $this->bottomleft["e"] = $w;
14                $this->bottomleft["n"] = $s;
15                $this->escale = $width/($e-$w);
16                $this->nscale = $height/($n-$s);
17                $this->width = $width; 
18                $this->height = $height; 
19        }
20
21        function is_valid()
22        {
23                return $this->width>0 && $this->height>0;
24        }
25
26        function get_x($e)
27        {
28                return round(($e - $this->bottomleft['e']) * $this->escale);
29        }
30       
31        function get_y($n)
32        {
33                return $this->height-
34                                round(($n-$this->bottomleft['n']) * $this->nscale);
35        }
36
37        function get_point($ll)
38        {
39                return array ("x" => $this->get_x($ll["e"]), 
40                                                "y" => $this->get_y($ll["n"]) );
41        }
42
43        function get_en($pt)
44        {
45                $e = $this->bottomleft['e'] +$pt['x']/$this->escale;
46                $n = $this->bottomleft['n'] + 
47                        ($this->height-$pt['y'])/$this->nscale;
48                return array ('e' => $e, 'n' => $n); 
49        }
50
51        function get_centre()
52        {
53                return $this->get_en
54                                (array('x'=>$this->width/2,'y'=>$this->height/2));
55        }
56
57        function within_map($en)
58        {
59                $pt['x'] = round($this->get_x($en['e']));
60                $pt['y'] = round($this->get_y($en['n']));
61                return $this->pt_within_map($pt);
62        }
63
64        function pt_within_map($pt)
65        {
66                return $pt['x']>=0 && $pt['y']>=0 && 
67                                $pt['x']<$this->width && $pt['y']<$this->height;
68        }
69
70        function pt_right_of_map ($pt)
71        {
72                return $pt['x'] >= $this->width;
73        }
74
75        function pt_below_map ($pt)
76        {
77                return $pt['y'] >= $this->height;
78        }
79
80        function set_scale($newescale, $newnscale)
81        {
82                $this->escale = $newescale;
83                $this->nscale = $newnscale;
84        }
85
86        // Return the n-e of the bottom left coordinate at a new scale
87        // while keeping the centre constant
88        function get_new_bottom_left($newescale, $newnscale)
89        {
90                // Get the centre as a n-e
91                $centre=$this->get_centre();
92                        // Coordinates of the new bottom left with respect to the centre
93                        // as the origin
94                        $pt['x'] = -$this->width/2; 
95                        $pt['y'] = $this->height/2;
96
97                        // Convert these to a n-e and return
98                        $new_bottom_left['e']=
99                                $centre['e']+round($pt['x']/($newescale/1000));
100                        $new_bottom_left['n']=$centre['n']-
101                                round($pt['y']/($newnscale/1000));
102                return $new_bottom_left; 
103        }
104
105        function centreToBottomLeft()
106        {
107                $pt['x'] = -$this->width/2; 
108                $pt['y'] = 3*($this->height/2);
109
110                // Convert these to a n-e and return
111                return $this->get_en($pt);
112        }
113
114        function get_top_right()
115        {
116                return $this->get_en(array("x"=>$this->width,"y"=>0));
117        }
118
119        function npeSuitable()
120        {
121                //return $this->width==125 && $this->height==125;
122                return true;
123        }
124}
125?>
Note: See TracBrowser for help on using the repository browser.