root/dev/common/class.map.php @ 123

Revision 123, 12.4 KB (checked in by exi, 16 years ago)

Admin: admin_mapoptions.php now deletes all regioncache images on submit of new values.
SQL: default inxed for kb3_ships_values.shp_id is now primary key.
Killlists should now properly show the old date format.
Fixed a typo in admin_mapoptions.tpl.
Added debug code to class.map.php.
The killmail importer should now work also with 1 killmail per request.

Line 
1<?php
2require_once('db.php');
3require_once('globals.php');
4
5class MapView
6{
7    function MapView($mode, $size = 200)
8    {
9        $this->mode_ = $mode;
10        $this->imgwidth_ = $size;
11        $this->imgheight_ = $size;
12        $this->ly_ = 0.4 / 1000000000000000;
13        $this->offset_ = 10;
14        // colors
15        /* unused, must have been some kind of painting by security
16        $this->sys_colors_[0] = array(200, 20, 48);
17        $this->sys_colors_[1] = array(200, 20, 48);
18        $this->sys_colors_[2] = array(200, 20, 48);
19        $this->sys_colors_[3] = array(241, 176, 48);
20        $this->sys_colors_[4] = array(200, 200, 48);
21        $this->sys_colors_[5] = array(219, 241, 48);
22        $this->sys_colors_[6] = array(103, 241, 62);
23        $this->sys_colors_[7] = array(83, 241, 114);
24        $this->sys_colors_[8] = array(26, 241, 183);
25        $this->sys_colors_[9] = array(99, 241, 255);
26        $this->sys_colors_[10] = array(99, 241, 255);
27        */
28
29        $this->linecolor_ = array(75, 75, 75);
30        $this->captioncolor_ = array(110, 110, 110);
31        $this->bgcolor_ = array(30, 30, 30);
32        $this->normalcolor_ = array(81, 103, 146);
33        $this->hlcolor_ = array(200, 200, 200);
34    }
35
36    function setbgcolor($r, $g, $b)
37    {
38        $this->bgcolor_ = array($r, $g, $b);
39    }
40
41    function setlinecolor($r, $g, $b)
42    {
43        $this->linecolor_ = array($r, $g, $b);
44    }
45
46    function setcaptcolor($r, $g, $b)
47    {
48        $this->captioncolor_ = array($r, $g, $b);
49    }
50
51    function setnormalcolor($r, $g, $b)
52    {
53        $this->normalcolor_ = array($r, $g, $b);
54    }
55
56    function sethlcolor($r, $g, $b)
57    {
58        $this->hlcolor_ = array($r, $g, $b);
59    }
60
61    function setOffset($offset)
62    {
63        $this->offset_ = $offset;
64    }
65
66    function showLines($enable)
67    {
68        $this->showlines_ = $enable;
69    }
70
71    function showSysNames($enable)
72    {
73        $this->showsysnames_ = $enable;
74    }
75
76    function colorSystems($enable)
77    {
78        $this->colorsystems_ = $enable;
79    }
80
81    function setRegionID($regionid)
82    {
83        $this->regionid_ = $regionid;
84    }
85
86    function setSystemID($systemid)
87    {
88        $this->systemid_ = $systemid;
89
90        $sql = 'select reg.reg_id, reg.reg_name, con.con_id, con.con_name, sys.sys_name, sys.sys_sec
91                from kb3_regions reg, kb3_constellations con, kb3_systems sys
92               where reg.reg_id = con.con_reg_id
93                 and con.con_id = sys.sys_con_id
94                 and sys.sys_id = '.$this->systemid_;
95
96        $qry = new DBQuery();
97        $qry->execute($sql);
98        $row = $qry->getRow();
99
100        $this->conid_ = $row['con_id'];
101        $this->regionid_ = $row['reg_id'];
102        $this->conname_ = $row['con_name'];
103        $this->regname_ = $row['reg_name'];
104        $this->sysname_ = $row['sys_name'];
105        $this->syssec_ = $row['sys_sec'];
106    }
107
108    function setTitle($title)
109    {
110        $this->title_ = $title;
111    }
112
113    function generate()
114    {
115        $sql = 'select sys.sys_x, sys.sys_y, sys.sys_z, sys.sys_sec,
116                   sys.sys_id, sys.sys_name, sys.sys_eve_id, sjp.sjp_to, con.con_id,
117                       con.con_name, reg.reg_id, reg.reg_name,
118                       reg.reg_x, reg.reg_z
119                   from kb3_systems sys, kb3_system_jumps sjp,
120                       kb3_constellations con, kb3_regions reg
121                   where con.con_id = sys.sys_con_id
122                   and reg.reg_id = con.con_reg_id
123                   and sjp.sjp_from = sys.sys_eve_id';
124
125        $regioncache = "cache/map/" . $this->regionid_ . "_" . $this->imgwidth_ . ".png";
126        $cached = false;
127
128        if ($this->mode_ == "map")
129        {
130            if (file_exists($regioncache))
131            {
132                header("Content-type: image/png");
133                readfile($regioncache);
134                return;
135            }
136            $caption = $this->regname_;
137        }
138
139        if ($this->mode_ == "region")
140        {
141            $sql .= " and reg.reg_id = " . $this->regionid_;
142            $caption = $this->conname_;
143        }
144
145        if ($this->mode_ == "cons")
146        {
147            $sql .= " and con.con_id = " . $this->conid_;
148            $caption = $this->sysname_ . " (" . roundsec($this->syssec_) . ")";
149        }
150
151        if (!$cached)
152        {
153            $qry = new DBQuery();
154            $qry->execute($sql) or die($qry->getErrorMsg());
155
156            if (!$img) $img = imagecreatetruecolor($this->imgwidth_, $this->imgheight_);
157            $white = imagecolorallocate($img, 255, 255, 255);
158            $red = imagecolorallocate($img, 255, 0, 0);
159            $bgcolor = imagecolorallocate($img, $this->bgcolor_[0], $this->bgcolor_[1], $this->bgcolor_[2]);
160            imagefilledrectangle($img, 0, 0, $this->imgwidth_, $this->imgheight_, $bgcolor);
161
162            $color = $white;
163
164            $fov = 0;
165
166            $i = 0;
167            $minx = 0;
168            $minz = 0;
169            $maxx = 0;
170            $maxz = 0;
171            $mini = 0;
172            $maxi = 0;
173            $pi = 0;
174            $sc = 0;
175            while ($row = $qry->getRow())
176            {
177                $i = $row['sys_eve_id'];
178                if ($i < $mini || $mini == 0)
179                    $mini = $i;
180                if ($i > $maxi || $maxi == 0)
181                    $maxi = $i;
182                $x = $row['sys_x'] * $this->ly_;
183                $z = $row['sys_z'] * $this->ly_;
184
185                if ($x < $minx || $minx == 0)
186                    $minx = $x;
187                if ($x > $maxx || $maxx == 0)
188                    $maxx = $x;
189                if ($z < $minz || $minz == 0)
190                    $minz = $z;
191                if ($z > $maxz || $maxz == 0)
192                    $maxz = $z;
193
194                $sys[$i][0] = $x;
195                $sys[$i][1] = $z;
196                if ($i == $pi || $pi == 0)
197                {
198                    $sys[$i][2][$sc] = $row['sjp_to'];
199                    $sys[$i][3] = $sc++;
200                }
201                else
202                {
203                    $sc = 0;
204                }
205                $sys[$i][4] = $row['sys_id'];
206                $sys[$i][5] = $row['sys_name'];
207                $sys[$i][6] = $row['sys_sec'];
208                $sys[$i][7] = $row['con_id'];
209                $sys[$i][8] = $row['con_name'];
210                $sys[$i][9] = $row['reg_id'];
211                $sys[$i][10] = $row['reg_name'];
212                $pi = $i;
213            }
214            $dx = abs($maxx - $minx);
215            $dz = abs($maxz - $minz);
216            $xscale = 1 / ($dx / ($this->imgwidth_ - ($this->offset_ * 2)));
217            $yscale = 1 / ($dz / ($this->imgheight_ - ($this->offset_ * 2)));
218            if ($_REQUEST['debug'] == 'admovrd')
219            {
220                echo "dx:".$dx." dz:".$dz."<br/> xscale:".$xscale." ".$yscale."<br/>";
221                echo "minx:".$minx." maxx:".$maxx."<br/>";
222                echo "minz:".$minz." maxz:".$maxz."<br/>".$sql."<br/>\n";
223                echo nl2br(print_r($this, 1));
224                echo nl2br(print_r($qry, 1));
225            }
226
227            // draw lines
228            if ($this->showlines_)
229            {
230                $n = $mini;
231                while ($n <= $maxi)
232                {
233                    $px = $this->offset_ + ($sys[$n][0] - $minx) * $xscale;
234                    $py = $this->offset_ + ($sys[$n][1] - $minz) * $yscale;
235
236                    $line_col = imagecolorallocate($img, $this->linecolor_[0], $this->linecolor_[1], $this->linecolor_[2]);
237
238                    for ($m = 0; $m <= $sys[$n][3]; $m++)
239                    {
240                        $sys_to = $sys[$n][2][$m];
241
242                        if ($sys[$sys_to][4] != "")
243                        {
244                            $px_to = $this->offset_ + ($sys[$sys_to][0] - $minx) * $xscale;
245                            $py_to = $this->offset_ + ($sys[$sys_to][1] - $minz) * $yscale;
246
247                            imageline($img, $px, $py, $px_to, $py_to, $line_col);
248                        }
249                    }
250
251                    $n++;
252                }
253            }
254            // draw systems
255            $n = $mini;
256            while ($n <= $maxi)
257            {
258                $px = round($this->offset_ + ($sys[$n][0] - $minx) * $xscale);
259                $py = round($this->offset_ + ($sys[$n][1] - $minz) * $yscale);
260
261                if ($this->mode_ == "map")
262                {
263                    if ($sys[$n][9] == $this->regionid_)
264                        $color = imagecolorallocate($img, $this->hlcolor_[0], $this->hlcolor_[1], $this->hlcolor_[2]);
265                    else
266                        $color = imagecolorallocate($img, $this->normalcolor_[0], $this->normalcolor_[1], $this->normalcolor_[2]);
267                }
268                if ($this->mode_ == "region")
269                {
270                    if ($sys[$n][7] == $this->conid_)
271                        $color = imagecolorallocate($img, $this->hlcolor_[0], $this->hlcolor_[1], $this->hlcolor_[2]);
272                    else
273                        $color = imagecolorallocate($img, $this->normalcolor_[0], $this->normalcolor_[1], $this->normalcolor_[2]);
274                }
275                if ($this->mode_ == "cons")
276                {
277                    if ($sys[$n][4] == $this->systemid_)
278                        $color = imagecolorallocate($img, $this->hlcolor_[0], $this->hlcolor_[1], $this->hlcolor_[2]);
279                    else
280                        $color = imagecolorallocate($img, $this->normalcolor_[0], $this->normalcolor_[1], $this->normalcolor_[2]);
281                }
282                // if ( $sys[$n][3] > 0 )
283                // $sec_status = round( $sys[$n][3] * 10 );
284                // else
285                // $sec_status = 0;
286                // $color = imagecolorallocate( $img, $this->sys_colors_[$sec_status][0],
287                // $this->sys_colors_[$sec_status][1],
288                // $this->sys_colors_[$sec_status][2] );
289                if ($this->showsysnames_)
290                {
291                    $tlen = 5 * strlen($sys[$n][5]);
292                    if (($px + $tlen > ($this->imgwidth_ - 20)))
293                        $sx = $px - $tlen;
294                    else
295                        $sx = $px + 5;
296                    if (($py + 5 > ($this->imgheight_ - 20)))
297                        $sy = $py - 5;
298                    else
299                        $sy = $py + 5;
300
301                    imagestring($img, 1, $sx, $sy, $sys[$n][5], $color);
302                    // imagettftext ( $img, 6, 0,
303                    // $sx,
304                    // $sy,
305                    // $color,
306                    // "../fonts/04B_03__.TTF",
307                    // $sys[$n][5] );
308                }
309
310                $ed = $xscale * 0.75;
311                if ($ed > 5)
312                {
313                    $ed = 5;
314                }
315                // bug compat: imagefilledellipse doesnt draw ellipses with 1px size
316                // on some installations
317                if ($ed < 1)
318                {
319                    imagesetpixel($img, $px, $py, $color);
320                }
321                elseif ($ed < 3)
322                {
323                    imagesetpixel($img, $px, $py, $color);
324                    imagesetpixel($img, $px+1, $py, $color);
325                    imagesetpixel($img, $px-1, $py, $color);
326                    imagesetpixel($img, $px, $py-1, $color);
327                    imagesetpixel($img, $px, $py+1, $color);
328                }
329                else
330                {
331                    imagefilledellipse($img, $px, $py, $ed, $ed, $color);
332                }
333
334                $n++;
335            }
336        }
337
338        $captioncolor = imagecolorallocate($img, $this->captioncolor_[0], $this->captioncolor_[1], $this->captioncolor_[2]);
339        if (strlen($this->title_) > 0)
340        {
341            $title = $this->title_ . " " . $caption;
342        }
343        else
344        {
345            $title = $caption;
346        }
347
348        imagestring($img, 1, 2, 2, $title, $captioncolor);
349        // imagettftext ( $img, 6, 0,
350        // 5,
351        // 10,
352        // $captioncolor,
353        // "../fonts/04B_03__.TTF",
354        // $title );
355        if ($this->mode_ == "map" && !$cached)
356        {
357            imagepng($img, $regioncache);
358        }
359        header("Content-type: image/png");
360        imagepng($img);
361    }
362}
363?>
Note: See TracBrowser for help on using the browser.