spearating data from methods
authorMagnus Manske <magnusmanske@users.mediawiki.org>
Fri, 14 Jan 2005 15:17:22 +0000 (15:17 +0000)
committerMagnus Manske <magnusmanske@users.mediawiki.org>
Fri, 14 Jan 2005 15:17:22 +0000 (15:17 +0000)
experiments/geo/geo.php
experiments/geo/geo_data.php [new file with mode: 0644]

index 420984e..9374eb5 100755 (executable)
 <?
-
-$a = array (
-
-"germany.bavaria/bw" => "!data:484627,092026 484900,092638 485407,092842 485407,093801 490146,092945 490329,094006 490146,094720 485640,094720 485822,095333 485549,095741 484718,100048 484354,100456 484536,101109 484212,101517 483341,101619 482146,101824 481639,102130 481224,102640 480302,103355 474925,103457 474509,102743 474600,102538 474145,102640 473456,102640 473041,101619 473041,101415 472535,101007 471339,101619 470053,101721 465314,101721 464443,101517 463521,101619 463521,100558 463521,095639 463014,094822",
-"germany.bavaria/hesse" => "!data:484900,091923 485407,091821 490004,092026 490926,091617 492212,091107 492537,092026 492628,093251 492537,094108 493316,094006 493458,094720 493914,095231 494745,095537 494602,100252 495251,100905",
-"germany.bavaria/thuringia" => "!data:495615,101109 495615,101926 494602,102947 494329,103804 493407,104008 493641,105131 494238,104620 494602,105335 494420,110805 493914,111111 494238,111622 495200,111417 495524,112132 494927,112541 494602,112949 494927,115031",
-"germany.bavaria/saxony" => "!data:494602,115235 494329,115644 494056,120256",
-"germany.bavaria/east" => "!data:493549,120154 492901,120909 492121,122134 491433,122747 490329,121930 484212,123604 483756,125033 482834,130054 482328,131013 481224,132137 481224,132749 480626,133912 475431,134321 474236,133810 474509,132545 473912,132443 472950,132034 472352,131115 472210,125952 471613,125238 471015,124625 470418,125340 465405,125850 464352,130054 464301,130401 463936,130605 462832,130401",
-"germany.bavaria/south" => "!data:462832,130401 463014,125238 463754,125135 464118,124319 463703,123502 464118,122747 463936,121930 464443,121828 464118,121317 463430,121726 463157,115542 463157,114316 462741,114010 462650,113153 462235,113255 462001,112336 462235,111928 461910,111315 462001,110458 462650,110152 463014,104620 462650,104110 463014,103559 462235,103804 461910,103804 460949,102436 460806,101926 461455,102334 461404,101721 462001,101517 462650,100150 462923,095844 462508,095639 462741,095027",
-
-"germany.bw/south" => "!data:463014,094312 463521,093659 463703,092945 464716,091617 463521,092332 464210,091107 463703,091311 463339,090658 463936,085943 463936,085535 464210,085535 464352,084922 464301,084106 463612,084003 463339,084310 463612,085229 463106,084922 462923,084106 462923,083351 463248,083147 463106,082330 462832,082125 462650,081513 462650,081207 463106,080656 462650,075737",
-"germany.bw/west" => "!data:463703,074920 464807,075022 465820,075329 470509,075124 472210,075941 473132,080248 474145,080758 475107,081615 475704,082228 480717,082738",
-"germany.bw/rp" => "!data:480808,083044 481639,083759 482743,084514 483847,084412 483847,084208 484900,084003",
-"germany.bw/hesse" => "!data:484951,084106 484536,084922 485042,085024 485133,085535 484536,085535 484445,090352 483847,090556 484718,091719",
-
-"germany.nrw/west" => "!data:515435,072940 514747,072021 514240,071306 513734,072021 513045,071409 513045,065531 513136,064305 512903,063244 511850,063551 510928,064305 510057,064612 504447,063857 504356,064305 503252,062529 502745,063346 502006,063551 501641,063142 501044,063755 500304,064612 495758,064101 495342,064816 494836,064918 494511,065122",
-"germany.nrw/rp" => "!data:494602,065020 494511,065428 494420,065939 494420,070552 494420,071409 495109,071000 495524,071306 495109,071715 495342,071919 495524,072021 500213,073655 500810,074614 500953,075022 501226,075941 501732,080350 502421,080656 502006,081207 501641,081411 501459,081717 500902,082023 500537,082432",
-"germany.nrw/hesse" => "!data:500628,082534 500902,082636 501317,082738 502006,083555 501732,084208 502148,084514 503252,084718 503343,085127 503434,085943 504214,085841 504538,085943 504538,085229 504811,085024 505409,085637 505551,090902 510148,090800 510422,091719 505733,091923 510057,092740 511110,093353",
-"germany.nrw/ns" => "!data:511343,093353 511941,093251 512812,093801 512903,093047 513551,092434 514604,092230 514656,091413 515344,091719 515526,091107 520033,091617 520448,091923 521228,091821 520630,090902 520357,090148 521319,085739 521319,085331 520904,083901 520306,084310 515344,084514 514929,084616 514422,083555 514240,082228 514149,081819 514422,081615 514838,082125 515111,081615 515800,082023 520357,081717 520306,080900 520955,080145 520448,080145 520124,075431 515617,074308 515526,073144",
-
-"germany.mv/brandenburg" => "!data:531619,134729 531710,134219 531345,134014 531254,133056 532125,133708 532307,133606 532358,133056 532358,132239 533138,131524 532632,131218 532358,130911 532034,130259 531437,130401 531203,125748 530839,124931 530606,123706 530424,122441 530839,120909 531528,114827 531021,114623 530606,113255 530606,112438 530059,112336 525644,112336 525917,111724 525644,110907",
-"germany.mv/ns" => "!data:525644,110907 525826,110356 531203,105029 530839,104723 531203,103559",
-"germany.mv/sh" => "!data:531203,103559 531943,103804 532632,104518 532905,105131 533502,105131 533736,104518 534424,104110 534840,104314 535255,104825",
-"germany.mv/north-east" => "!data:535346,104825 535619,105437 535710,110152 535619,110601 535255,111417 535802,111724 540906,112438 540906,113153 542101,115542 543256,120705 543529,122849 544400,123604 545048,124727 544218,125135 544400,130054 543944,130259 543205,125952 542658,130911 542152,130605 542607,125646 542101,124931 541503,124727 541048,125544 541412,130707 541230,131830 540632,132953 535853,133300 535204,131932 534606,133606 532125,134627",
-
-"germany.mv" => "
-!type[political]:state
-!name[de]:Mecklenburg-Vorpommern
-!name[en]:Mecklenburg-Western Pomerania
-!region[political]:
-polygon(germany.mv/brandenburg,germany.mv/ns,germany.mv/sh,germany.mv/north-east)
-",
-
-"germany.nrw" => "
-!type[political]:state
-!name[de]:Nordrhein-Westphalen
-!name[en]:North Rhine-Westphalia
-!region[political]:
-polygon(germany.nrw/west,germany.nrw/rp,germany.nrw/hesse,germany.nrw/ns)
-",
-
-"germany.bavaria" => "
-!type[political]:state
-!name[de]:Bayern
-!name[en]:Bavaria
-!region[political]:
-polygon(germany.bavaria/hesse,germany.bavaria/thuringia,germany.bavaria/saxony,germany.bavaria/east,germany.bavaria/south,germany.bavaria/bw)
-",
-
-"germany.bw" => "
-!type[political]:state
-!name[de]:Baden-Württemberg
-!name[en]:Baden-Württemberg
-!region[political]:
-polygon(germany.bavaria/bw,germany.bw/south,germany.bw/west,germany.bw/rp,germany.bw/hesse)
-",
-
-"germany" => "
-!type[political]:country
-!name[de]:Deutschland
-!name[en]:Germany
-!region[political]:
-addregs(germany.bavaria,germany.bw,germany.nrw,germany.mv)
-",
-
-"danube" => "
-!type:river
-!region:polyline(danube_germany,danube_austria)
-" ,
-
-"danube_germany" =>"!data:120,350 180,250 200,290" ,
-"danube_austria" =>"!data:220,350 250,320 300,370" ,
-
-) ;
-
+include_once ( "geo_data.php" ) ;
 include_once ( "geo_functions.php" ) ;
 
-# Global, evil variables
-$min_x = $min_y = 1000000 ;
-$max_x = $max_y = -1000000 ;
-
 # Global functions
 function geo_get_text ( $id )
        {
-       global $a ;
-       return $a[$id] ;
+       global $geo_data ;
+       return $geo_data[$id] ;
        }
 
-function data_to_real ( &$x , &$y )
-       {
-       $x = coordinate_to_number ( coordinate_take_apart ( $x ) ) ;
-       $y = coordinate_to_number ( coordinate_take_apart ( $y ) ) ;
-
-       $z = $x ; $x = $y ; $y = $z ;
-       $y = 90 * 3600 - $y ;
 
-//     $x /= 100 ;
-//     $y /= 100 ;
 
-       # Recording min and max
-       global $min_x , $min_y , $max_x , $max_y ;
-       $min_x = min ( $min_x , $x ) ;
-       $min_y = min ( $min_y , $y ) ;
-       $max_x = max ( $max_x , $x ) ;
-       $max_y = max ( $max_y , $y ) ;
-       }
-
-
-# geo paramaters
+# geo paramater class
 class geo_params
        {
+       var $min_x = 1000000 ;
+       var $max_x = -1000000 ;
+       var $min_y = 1000000 ;
+       var $max_y = -1000000 ;
        var $labels = array () ;
+       var $languages = array ( "en" ) ; # Default language
+       var $style_fill = array () ;
+       var $style_border = array () ;
+       var $style_label = array () ;
+
+       function get_styles ( $id , $type )
+               {
+               return "fill:brown; stroke:black; stroke-width:1" ;
+               }
+
+       function data_to_real ( &$x , &$y )
+               {
+               $x = coordinate_to_number ( coordinate_take_apart ( $x ) ) ;
+               $y = coordinate_to_number ( coordinate_take_apart ( $y ) ) ;
        
+               $z = $x ; $x = $y ; $y = $z ; # Switching y/x to x/y
+               $y = 90 * 3600 - $y ; # displaying from north to south
+
+               # Recording min and max
+               $this->min_x = min ( $this->min_x , $x ) ;
+               $this->min_y = min ( $this->min_y , $y ) ;
+               $this->max_x = max ( $this->max_x , $x ) ;
+               $this->max_y = max ( $this->max_y , $y ) ;
+               }
+
+       function get_view_box ()
+               {
+               $min_x = $this->min_x ;
+               $max_x = $this->max_x ;
+               $min_y = $this->min_y ;
+               $max_y = $this->max_y ;
+               $width = $max_x - $min_x ;
+               $height = $max_y - $min_y ;
+               $min_x -= $width / 10 ;
+               $min_y -= $height / 10 ;
+               $max_x += $width / 10 ;
+               $max_y += $height / 10 ;
+               
+               $max_x -= $min_x ;
+               $max_y -= $min_y ;
+               return "{$min_x} {$min_y} {$max_x} {$max_y}" ;
+               }
+
        function add_label ( $text_array )
                {
                $this->labels[] = $text_array ;
@@ -120,6 +70,7 @@ class geo_params
        function get_svg_labels ()
                {
                $ret = "" ;
+               $medium_font_size = floor ( ( $this->max_x - $this->min_x ) / (100/3) ) ;
                foreach ( $this->labels AS $l )
                        {
                        $text = $l['text'] ;
@@ -127,8 +78,8 @@ class geo_params
                        $y = $l['y'] ;
                        $s = "<text style='" ;
                        $fs = $l['font-size'] ;
-                       if ( $fs == "medium" ) $fs = "1000" ;
-                       if ( $fs == "" ) $fs = "800" ;
+                       if ( $fs == "medium" ) $fs = $medium_font_size ;
+                       if ( $fs == "" ) $fs = $medium_font_size * 8 / 10 ;
 
                        $p = array() ;
                        $p[] = "text-anchor:middle" ;
@@ -147,11 +98,13 @@ class geo_params
 # "geo" class
 class geo
        {
+       var $id ;
        var $data = array () ;
        var $xsum , $ysum , $count ;
        
-       function set_from_text ( $t )
+       function set_from_text ( $t , $id = "" )
                {
+               $this->id = $id ;
                $t = explode ( "\n!" , "\n".$t ) ;
                $this->data = array () ;
                foreach ( $t AS $x )
@@ -168,10 +121,10 @@ class geo
        
        function set_from_id ( $id )
                {
-               $this->set_from_text ( geo_get_text ( $id ) ) ;
+               $this->set_from_text ( geo_get_text ( $id ) , $id ) ;
                }
 
-       function get_data ()
+       function get_data ( &$params )
                {
                $ret = array () ;
                if ( !isset ( $this->data["data"] ) ) return $ret ; # No data in this set
@@ -185,7 +138,7 @@ class geo
                                {
                                $x = trim ( array_shift ( $a ) ) ;
                                $y = trim ( array_shift ( $a ) ) ;
-                               data_to_real ( $x , $y ) ;
+                               $params->data_to_real ( $x , $y ) ;
                                $ret[] = array ( $x , $y ) ;
                                }
                        }
@@ -240,7 +193,7 @@ class geo
                {
                $t = trim ( strtolower ( $this->get_current_type ( $params ) ) ) ;
                if ( $t == "river" ) $s = "fill:none; stroke:blue; stroke-width:2" ;
-               else $s = "fill:brown; stroke:black; stroke-width:1" ;
+               else $s = $params->get_styles ( $this->id , $t ) ;
                return "style=\"{$s}\"" ;
                }
 
@@ -251,7 +204,6 @@ class geo
                while ( count ( $a ) < 2 ) $a[] = "" ;
                $command = trim ( strtolower ( array_shift ( $a ) ) ) ;
                $values = trim ( str_replace ( ")" , "" , array_shift ( $a ) ) ) ;
-#              print "Evaluating command {$line}\n" ;
                if ( $command == "addregs" || $command == "include" )
                        {
                        $values = explode ( "," , $values ) ;
@@ -272,7 +224,7 @@ class geo
                                $v = trim ( strtolower ( $v ) ) ;
                                $ng = new geo ;
                                $ng->set_from_id ( $v ) ;
-                               $b = $ng->get_data () ;
+                               $b = $ng->get_data ( $params ) ;
                                $this->add_reordered_data ( $data , $b ) ;
                                }
 
@@ -283,7 +235,6 @@ class geo
                                {
                                $x = $a[0] ;
                                $y = $a[1] ;
-//                             data_to_real ( $x , $y ) ;
                                $this->xsum += $x ;
                                $this->ysum += $y ;
                                $this->count++ ;
@@ -297,7 +248,7 @@ class geo
 
        function add_label ( $x , $y , &$params )
                {
-               $text = $this->get_specs ( "name" , array ( "de" ) ) ;
+               $text = $this->get_specs ( "name" , $params->languages ) ;
                if ( $text == "" ) return "" ;
                $text = utf8_decode ( $this->data[$text][0] ) ;
                $x = floor ( $x ) ;
@@ -333,6 +284,9 @@ $g = new geo ;
 $g->set_from_id ( "germany" ) ;
 
 $p = new geo_params ;
+$p->languages = array ( "de" , "en" ) ; # Fallback to "en" if there's no "de"
+$p->style_fill = array ( "de.sylt" => "blue" ) ;
+
 $svg = $g->draw ( $p ) ;
 $svg .= $p->get_svg_labels () ;
 
@@ -346,20 +300,12 @@ $styles = '       <defs>
 ' ;
 */
 
-$width = $max_x - $min_x ;
-$height = $max_y - $min_y ;
-$min_x -= $width / 10 ;
-$min_y -= $height / 10 ;
-$max_x += $width / 10 ;
-$max_y += $height / 10 ;
-
-$max_x -= $min_x ;
-$max_y -= $min_y ;
+$viewBox = $p->get_view_box () ;
 
 $svg = 
 '<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/SVG/DTD/svg10.dtd">
-<svg viewBox="' . "{$min_x} {$min_y} {$max_x} {$max_y}" .
+<svg viewBox="' . $viewBox .
 '" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
 '
        . $styles .
diff --git a/experiments/geo/geo_data.php b/experiments/geo/geo_data.php
new file mode 100644 (file)
index 0000000..75b0cfc
--- /dev/null
@@ -0,0 +1,104 @@
+<?
+# This file will become obsolete once the data is stored in wiki pages!
+
+$geo_data = array (
+
+"germany.bavaria/bw" => "!data:484627,092026 484900,092638 485407,092842 485407,093801 490146,092945 490329,094006 490146,094720 485640,094720 485822,095333 485549,095741 484718,100048 484354,100456 484536,101109 484212,101517 483341,101619 482146,101824 481639,102130 481224,102640 480302,103355 474925,103457 474509,102743 474600,102538 474145,102640 473456,102640 473041,101619 473041,101415 472535,101007 471339,101619 470053,101721 465314,101721 464443,101517 463521,101619 463521,100558 463521,095639 463014,094822",
+"germany.bavaria/hesse" => "!data:484900,091923 485407,091821 490004,092026 490926,091617 492212,091107 492537,092026 492628,093251 492537,094108 493316,094006 493458,094720 493914,095231 494745,095537 494602,100252 495251,100905",
+"germany.bavaria/thuringia" => "!data:495615,101109 495615,101926 494602,102947 494329,103804 493407,104008 493641,105131 494238,104620 494602,105335 494420,110805 493914,111111 494238,111622 495200,111417 495524,112132 494927,112541 494602,112949 494927,115031",
+"germany.bavaria/saxony" => "!data:494602,115235 494329,115644 494056,120256",
+"germany.bavaria/east" => "!data:493549,120154 492901,120909 492121,122134 491433,122747 490329,121930 484212,123604 483756,125033 482834,130054 482328,131013 481224,132137 481224,132749 480626,133912 475431,134321 474236,133810 474509,132545 473912,132443 472950,132034 472352,131115 472210,125952 471613,125238 471015,124625 470418,125340 465405,125850 464352,130054 464301,130401 463936,130605 462832,130401",
+"germany.bavaria/south" => "!data:462832,130401 463014,125238 463754,125135 464118,124319 463703,123502 464118,122747 463936,121930 464443,121828 464118,121317 463430,121726 463157,115542 463157,114316 462741,114010 462650,113153 462235,113255 462001,112336 462235,111928 461910,111315 462001,110458 462650,110152 463014,104620 462650,104110 463014,103559 462235,103804 461910,103804 460949,102436 460806,101926 461455,102334 461404,101721 462001,101517 462650,100150 462923,095844 462508,095639 462741,095027",
+
+"germany.bw/south" => "!data:463014,094312 463521,093659 463703,092945 464716,091617 463521,092332 464210,091107 463703,091311 463339,090658 463936,085943 463936,085535 464210,085535 464352,084922 464301,084106 463612,084003 463339,084310 463612,085229 463106,084922 462923,084106 462923,083351 463248,083147 463106,082330 462832,082125 462650,081513 462650,081207 463106,080656 462650,075737",
+"germany.bw/west" => "!data:463703,074920 464807,075022 465820,075329 470509,075124 472210,075941 473132,080248 474145,080758 475107,081615 475704,082228 480717,082738",
+"germany.bw/rp" => "!data:480808,083044 481639,083759 482743,084514 483847,084412 483847,084208 484900,084003",
+"germany.bw/hesse" => "!data:484951,084106 484536,084922 485042,085024 485133,085535 484536,085535 484445,090352 483847,090556 484718,091719",
+
+"germany.nrw/west" => "!data:515435,072940 514747,072021 514240,071306 513734,072021 513045,071409 513045,065531 513136,064305 512903,063244 511850,063551 510928,064305 510057,064612 504447,063857 504356,064305 503252,062529 502745,063346 502006,063551 501641,063142 501044,063755 500304,064612 495758,064101 495342,064816 494836,064918 494511,065122",
+"germany.nrw/rp" => "!data:494602,065020 494511,065428 494420,065939 494420,070552 494420,071409 495109,071000 495524,071306 495109,071715 495342,071919 495524,072021 500213,073655 500810,074614 500953,075022 501226,075941 501732,080350 502421,080656 502006,081207 501641,081411 501459,081717 500902,082023 500537,082432",
+"germany.nrw/hesse" => "!data:500628,082534 500902,082636 501317,082738 502006,083555 501732,084208 502148,084514 503252,084718 503343,085127 503434,085943 504214,085841 504538,085943 504538,085229 504811,085024 505409,085637 505551,090902 510148,090800 510422,091719 505733,091923 510057,092740 511110,093353",
+"germany.nrw/ns" => "!data:511343,093353 511941,093251 512812,093801 512903,093047 513551,092434 514604,092230 514656,091413 515344,091719 515526,091107 520033,091617 520448,091923 521228,091821 520630,090902 520357,090148 521319,085739 521319,085331 520904,083901 520306,084310 515344,084514 514929,084616 514422,083555 514240,082228 514149,081819 514422,081615 514838,082125 515111,081615 515800,082023 520357,081717 520306,080900 520955,080145 520448,080145 520124,075431 515617,074308 515526,073144",
+
+"germany.mv/brandenburg" => "!data:531619,134729 531710,134219 531345,134014 531254,133056 532125,133708 532307,133606 532358,133056 532358,132239 533138,131524 532632,131218 532358,130911 532034,130259 531437,130401 531203,125748 530839,124931 530606,123706 530424,122441 530839,120909 531528,114827 531021,114623 530606,113255 530606,112438 530059,112336 525644,112336 525917,111724 525644,110907",
+"germany.mv/ns" => "!data:525644,110907 525826,110356 531203,105029 530839,104723 531203,103559",
+"germany.mv/sh" => "!data:531203,103559 531943,103804 532632,104518 532905,105131 533502,105131 533736,104518 534424,104110 534840,104314 535255,104825",
+"germany.mv/north-east" => "!data:535346,104825 535619,105437 535710,110152 535619,110601 535255,111417 535802,111724 540906,112438 540906,113153 542101,115542 543256,120705 543529,122849 544400,123604 545048,124727 544218,125135 544400,130054 543944,130259 543205,125952 542658,130911 542152,130605 542607,125646 542101,124931 541503,124727 541048,125544 541412,130707 541230,131830 540632,132953 535853,133300 535204,131932 534606,133606 532125,134627",
+
+"germany.sylt" => "
+!type[political]:isle
+!name[de]:Sylt
+!name[en]:Sylt
+!region:
+polygon(germany.sylt)
+!data:544724,083657 550010,083759 551114,084412 550841,084718 550517,084412 545828,084310 545828,084922 545504,084310 545555,084003 544906,084003
+",
+
+"germany.sh/north" => "!data:535346,104825 535619,104314 540217,104314 540126,104620 541230,105744 542101,105539 542516,110050 542425,110805 543256,110152 543438,105437 542931,105131 542749,105642 542607,105642 542516,105131 542425,104927 542010,103906 542243,103253 542607,101619 542101,101007 542607,101313 542840,101007 542749,095639 543347,100150 544218,100354 544957,100150 545048,095639 545413,094108 545919,094006 545413,093557 545413,093047 545322,092638 545555,092332 545737,085535",
+"germany.sh/west" => "!data:545555,085433 544542,085943 543256,091311 542658,090658 542425,085331 541503,085331 541554,090046 541736,090902 541139,090556 540541,090556 535944,091005 535853,090658 534931,091413",
+
+"germany.sh.body" => "
+!type:abstract
+!region[political]:
+polygon(germany.mv/sh,germany.sh/north,germany.sh/west)
+",
+
+"germany.sh" => "
+!type[political]:state
+!name[de]:Schleswig-Holstein
+!name[en]:Schleswig-Holstein
+!region[political]:
+addregs(germany.sylt,germany.sh.body)
+",
+
+"germany.mv" => "
+!type[political]:state
+!name[de]:Mecklenburg-Vorpommern
+!name[en]:Mecklenburg-Western Pomerania
+!region[political]:
+polygon(germany.mv/brandenburg,germany.mv/ns,germany.mv/sh,germany.mv/north-east)
+",
+
+"germany.nrw" => "
+!type[political]:state
+!name[de]:Nordrhein-Westphalen
+!name[en]:North Rhine-Westphalia
+!region[political]:
+polygon(germany.nrw/west,germany.nrw/rp,germany.nrw/hesse,germany.nrw/ns)
+",
+
+"germany.bavaria" => "
+!type[political]:state
+!name[de]:Bayern
+!name[en]:Bavaria
+!region[political]:
+polygon(germany.bavaria/hesse,germany.bavaria/thuringia,germany.bavaria/saxony,germany.bavaria/east,germany.bavaria/south,germany.bavaria/bw)
+",
+
+"germany.bw" => "
+!type[political]:state
+!name[de]:Baden-Württemberg
+!name[en]:Baden-Württemberg
+!region[political]:
+polygon(germany.bavaria/bw,germany.bw/south,germany.bw/west,germany.bw/rp,germany.bw/hesse)
+",
+
+"germany" => "
+!type[political]:country
+!name[de]:Deutschland
+!name[en]:Germany
+!region[political]:
+addregs(germany.bavaria,germany.bw,germany.nrw,germany.mv,germany.sh)
+",
+
+"danube" => "
+!type:river
+!region:polyline(danube_germany,danube_austria)
+" ,
+
+"danube_germany" =>"!data:120,350 180,250 200,290" ,
+"danube_austria" =>"!data:220,350 250,320 300,370" ,
+
+) ;
+
+?>
\ No newline at end of file