r26945 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r26944‎ | r26945 | r26946 >
Date:15:52, 25 October 2007
Author:dschwen
Status:old
Tags:
Comment:
Setting up a directory structure for the WikiMiniAtlas.
Modified paths:
  • /trunk/extensions/WikiMiniAtlas (added) (history)
  • /trunk/extensions/WikiMiniAtlas/LICENSE.GPL (added) (history)
  • /trunk/extensions/WikiMiniAtlas/README (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/button_hide.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/button_menu.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/button_minus.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/button_plus.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/button_target.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/button_target_locked.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/dummy.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/label_corner_ul.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/label_dot_11.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/label_dot_3.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/label_dot_5.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/label_dot_7.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/label_dot_9.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/label_summit.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/images/red_dot.png (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/labels (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/shp (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/shp/README (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/tiles (added) (history)
  • /trunk/extensions/WikiMiniAtlas/data/tiles/README (added) (history)
  • /trunk/extensions/WikiMiniAtlas/missingmapnik.php (added) (history)
  • /trunk/extensions/WikiMiniAtlas/server (added) (history)
  • /trunk/extensions/WikiMiniAtlas/server/mapniktile.cpp (added) (history)
  • /trunk/extensions/WikiMiniAtlas/wikiminiatlas.css (added) (history)

Diff [purge]

Index: trunk/extensions/WikiMiniAtlas/data/shp/README
@@ -0,0 +1,6 @@
 2+This directory contains the VMAP-0 data in SHP format.
 3+
 4+VMAP-0 can be downloaded at ...
 5+
 6+Use the ... conversion script to generate the needed SHP files. The conversion script depends
 7+on ...
Index: trunk/extensions/WikiMiniAtlas/data/tiles/README
@@ -0,0 +1 @@
 2+ache directory for rendered map tiles
Index: trunk/extensions/WikiMiniAtlas/data/images/label_corner_ul.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/label_corner_ul.png
___________________________________________________________________
Added: svn:mime-type
13 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/label_dot_3.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/label_dot_3.png
___________________________________________________________________
Added: svn:mime-type
24 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/label_dot_5.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/label_dot_5.png
___________________________________________________________________
Added: svn:mime-type
35 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/dummy.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/dummy.png
___________________________________________________________________
Added: svn:mime-type
46 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/label_dot_7.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/label_dot_7.png
___________________________________________________________________
Added: svn:mime-type
57 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/label_dot_9.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/label_dot_9.png
___________________________________________________________________
Added: svn:mime-type
68 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/label_summit.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/label_summit.png
___________________________________________________________________
Added: svn:mime-type
79 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/button_plus.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/button_plus.png
___________________________________________________________________
Added: svn:mime-type
810 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/button_menu.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/button_menu.png
___________________________________________________________________
Added: svn:mime-type
911 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/red_dot.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/red_dot.png
___________________________________________________________________
Added: svn:mime-type
1012 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/button_target.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/button_target.png
___________________________________________________________________
Added: svn:mime-type
1113 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/button_target_locked.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/button_target_locked.png
___________________________________________________________________
Added: svn:mime-type
1214 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/button_hide.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/button_hide.png
___________________________________________________________________
Added: svn:mime-type
1315 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/button_minus.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/button_minus.png
___________________________________________________________________
Added: svn:mime-type
1416 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/data/images/label_dot_11.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/extensions/WikiMiniAtlas/data/images/label_dot_11.png
___________________________________________________________________
Added: svn:mime-type
1517 + application/octet-stream
Index: trunk/extensions/WikiMiniAtlas/wikiminiatlas.css
@@ -0,0 +1,168 @@
 2+<!--
 3+ WikiMiniAtlas stylesheet
 4+ 2006 by Daniel Schwen, licensed under GFDL
 5+-->
 6+
 7+a { text-decoration:none; color:#2255aa; }
 8+a:hover { color:white; }
 9+a.label {
 10+ font-size:7pt;
 11+ z-index:20;
 12+ position: absolute;
 13+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_corner_ul.png');
 14+ background-repeat: no-repeat;
 15+ padding-left:5px;
 16+}
 17+
 18+/* commons thumb */
 19+a.cthumb {
 20+ font-size:7pt;
 21+ z-index:20;
 22+ position: absolute;
 23+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_corner_ul.png');
 24+ background-repeat: no-repeat;
 25+ padding-left:3px;
 26+ padding-top:3px;
 27+ width:51px; /* 48+3 */
 28+}
 29+
 30+/* Standard */
 31+a.label0 {
 32+ font-size:7pt;
 33+ z-index:20;
 34+ position: absolute;
 35+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_corner_ul.png');
 36+ background-repeat: no-repeat;
 37+ padding-left:5px;
 38+}
 39+
 40+a.label1 {
 41+ font-size:7pt;
 42+ z-index:20;
 43+ position: absolute;
 44+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_corner_ul.png');
 45+ background-repeat: no-repeat;
 46+ padding-left:5px;
 47+}
 48+
 49+/* Mountain */
 50+a.label2 {
 51+ font-size:7pt;
 52+ z-index:20;
 53+ position: absolute;
 54+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_summit.png');
 55+ background-repeat: no-repeat;
 56+ padding-left:13px;
 57+}
 58+
 59+/* Country */
 60+a.label3 {
 61+ font-size:7pt;
 62+ font-weight: bold;
 63+ text-align: center;
 64+ /*text-decoration: underline;*/
 65+ z-index:20;
 66+ position: absolute;
 67+}
 68+
 69+/* Landmark */
 70+a.label4 {
 71+ font-size:7pt;
 72+ z-index:20;
 73+ position: absolute;
 74+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_corner_ul.png');
 75+ background-repeat: no-repeat;
 76+ padding-left:5px;
 77+}
 78+
 79+/* City < 10000 */
 80+a.label5 {
 81+ font-size:7pt;
 82+ z-index:20;
 83+ position: absolute;
 84+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_dot_3.png');
 85+ background-repeat: no-repeat;
 86+ padding-left:5px;
 87+}
 88+/* City < 100000 */
 89+a.label6 {
 90+ font-size:7pt;
 91+ z-index:20;
 92+ position: absolute;
 93+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_dot_5.png');
 94+ background-repeat: no-repeat;
 95+ padding-left:7px;
 96+}
 97+/* City < 500000 */
 98+a.label7 {
 99+ font-size:7pt;
 100+ z-index:20;
 101+ position: absolute;
 102+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_dot_7.png');
 103+ background-repeat: no-repeat;
 104+ padding-left:9px;
 105+}
 106+/* City < 1000000 */
 107+a.label8 {
 108+ font-size:7pt;
 109+ z-index:20;
 110+ position: absolute;
 111+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_dot_9.png');
 112+ background-repeat: no-repeat;
 113+ padding-left:11px;
 114+}
 115+/* City > 1000000 */
 116+a.label9 {
 117+ font-size:7pt;
 118+ z-index:20;
 119+ position: absolute;
 120+ background-image:url('http://tools.wikimedia.de/~dschwen/wikiminiatlas/symbols/label_dot_11.png');
 121+ background-repeat: no-repeat;
 122+ padding-left:13px;
 123+}
 124+p.option {
 125+ border: 1px solid gray;
 126+ margin: 0.5em;
 127+ padding: 0.5em;
 128+ width: 80%;
 129+ background-color: #dddddd;
 130+}
 131+
 132+#coordinates_3_ObenRechts { position: absolute; top:1em; right:1em; }
 133+#wikiminiatlas_widget {
 134+ position:absolute;
 135+ left:0px; top: 0px;
 136+ width:100%; height:100%;
 137+ background-color: white;
 138+ border: none;
 139+ padding: 0px;
 140+ margin:0px;
 141+ font-family: sans-serif;
 142+}
 143+
 144+#wikiminiatlas_settings {
 145+ position:absolute;
 146+ left:0px; top: 0px;
 147+ width:100%; height:100%;
 148+ background-color: white;
 149+ border: none;
 150+ padding: 1em;
 151+ margin:0px;
 152+ font-family: sans-serif;
 153+ visibility: hidden;
 154+ z-index:40;
 155+}
 156+
 157+#scalebox {
 158+ z-index:30;
 159+ position:absolute;
 160+ left:10px;
 161+ bottom: 5px;
 162+ width:90px;
 163+}
 164+#scalebar {
 165+ height:5px; background-color:white; border: 1px solid black; width:80px; font-size: 0px;
 166+}
 167+#scalelabel {
 168+ font-size: 50%; color: black;
 169+}
Index: trunk/extensions/WikiMiniAtlas/README
@@ -0,0 +1,28 @@
 2+//////////////////////////////////////////////////////////////////////////
 3+
 4+ WikiMiniAtlas - A draggable and zoomable popup map displaying
 5+ geocoded articles in Wikipedia
 6+
 7+ Copyright (C) 2007 Daniel Schwen (dschwen)
 8+
 9+ This program is free software; you can redistribute it and/or
 10+ modify it under the terms of the GNU General Public License
 11+ as published by the Free Software Foundation; either version 2
 12+ of the License, or any later version.
 13+
 14+ This program is distributed in the hope that it will be useful,
 15+ but WITHOUT ANY WARRANTY; without even the implied warranty of
 16+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 17+ GNU General Public License for more details.
 18+
 19+ You should have received a copy of the GNU General Public License
 20+ along with this program; if not, write to the Free Software
 21+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 22+
 23+//////////////////////////////////////////////////////////////////////////
 24+
 25+
 26+== Dependencies ==
 27+
 28+To build the server side code for the WikiMiniAtlas you need to install
 29+the Mapnik mapping library (available at http://www.mapnik.org)
Index: trunk/extensions/WikiMiniAtlas/missingmapnik.php
@@ -0,0 +1,47 @@
 2+<?
 3+$url = $_SERVER["REQUEST_URI"];
 4+$base = "/~dschwen/wikiminiatlas/tiles/mapnik";
 5+$tilegen = "/home/dschwen/wikiminiatlas/mapnik/mapniktile";
 6+
 7+//
 8+// is the requested URL pointing to a tile set dir?
 9+//
 10+if( substr($url,0,strlen($base)) == $base )
 11+{
 12+ //
 13+ // is the tile filename format correct?
 14+ //
 15+ if( preg_match('{^([0-9]+)\/tile_([0-9]+)_([0-9]+)\.png$}',substr($url,strlen($base)), $matches) )
 16+ {
 17+ $z = intval($matches[1]);
 18+ $y = intval($matches[2]);
 19+ $x = intval($matches[3]);
 20+
 21+ $mx = 3 * ( 1 << $z );
 22+ $my = $mx/2;
 23+
 24+ //
 25+ // was a legal tile number requested?
 26+ //
 27+ if( $z>=8 && $y>=0 && $x>=0 && $x<$mx && $y<$my )
 28+ {
 29+ $tfile = "mapnik$z/tile_" . $y . "_" . $x . ".png";
 30+ umask( 0033 );
 31+ exec( $tilegen . " " . ($z-1) . " " . $y . " " . $x . " " . $tfile );
 32+
 33+ if( strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') > 0 )
 34+ {
 35+ header( 'Content-type: image/png' );
 36+ readfile( $tfile );
 37+ }
 38+ else
 39+ {
 40+ header( "Location: $url" );
 41+ header( 'Status: 302' );
 42+ }
 43+ }
 44+ else echo "outside range";
 45+ }
 46+ else echo "filename format error";
 47+}
 48+?>
Index: trunk/extensions/WikiMiniAtlas/LICENSE.GPL
@@ -0,0 +1,339 @@
 2+ GNU GENERAL PUBLIC LICENSE
 3+ Version 2, June 1991
 4+
 5+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 6+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 7+ Everyone is permitted to copy and distribute verbatim copies
 8+ of this license document, but changing it is not allowed.
 9+
 10+ Preamble
 11+
 12+ The licenses for most software are designed to take away your
 13+freedom to share and change it. By contrast, the GNU General Public
 14+License is intended to guarantee your freedom to share and change free
 15+software--to make sure the software is free for all its users. This
 16+General Public License applies to most of the Free Software
 17+Foundation's software and to any other program whose authors commit to
 18+using it. (Some other Free Software Foundation software is covered by
 19+the GNU Lesser General Public License instead.) You can apply it to
 20+your programs, too.
 21+
 22+ When we speak of free software, we are referring to freedom, not
 23+price. Our General Public Licenses are designed to make sure that you
 24+have the freedom to distribute copies of free software (and charge for
 25+this service if you wish), that you receive source code or can get it
 26+if you want it, that you can change the software or use pieces of it
 27+in new free programs; and that you know you can do these things.
 28+
 29+ To protect your rights, we need to make restrictions that forbid
 30+anyone to deny you these rights or to ask you to surrender the rights.
 31+These restrictions translate to certain responsibilities for you if you
 32+distribute copies of the software, or if you modify it.
 33+
 34+ For example, if you distribute copies of such a program, whether
 35+gratis or for a fee, you must give the recipients all the rights that
 36+you have. You must make sure that they, too, receive or can get the
 37+source code. And you must show them these terms so they know their
 38+rights.
 39+
 40+ We protect your rights with two steps: (1) copyright the software, and
 41+(2) offer you this license which gives you legal permission to copy,
 42+distribute and/or modify the software.
 43+
 44+ Also, for each author's protection and ours, we want to make certain
 45+that everyone understands that there is no warranty for this free
 46+software. If the software is modified by someone else and passed on, we
 47+want its recipients to know that what they have is not the original, so
 48+that any problems introduced by others will not reflect on the original
 49+authors' reputations.
 50+
 51+ Finally, any free program is threatened constantly by software
 52+patents. We wish to avoid the danger that redistributors of a free
 53+program will individually obtain patent licenses, in effect making the
 54+program proprietary. To prevent this, we have made it clear that any
 55+patent must be licensed for everyone's free use or not licensed at all.
 56+
 57+ The precise terms and conditions for copying, distribution and
 58+modification follow.
 59+
 60+ GNU GENERAL PUBLIC LICENSE
 61+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 62+
 63+ 0. This License applies to any program or other work which contains
 64+a notice placed by the copyright holder saying it may be distributed
 65+under the terms of this General Public License. The "Program", below,
 66+refers to any such program or work, and a "work based on the Program"
 67+means either the Program or any derivative work under copyright law:
 68+that is to say, a work containing the Program or a portion of it,
 69+either verbatim or with modifications and/or translated into another
 70+language. (Hereinafter, translation is included without limitation in
 71+the term "modification".) Each licensee is addressed as "you".
 72+
 73+Activities other than copying, distribution and modification are not
 74+covered by this License; they are outside its scope. The act of
 75+running the Program is not restricted, and the output from the Program
 76+is covered only if its contents constitute a work based on the
 77+Program (independent of having been made by running the Program).
 78+Whether that is true depends on what the Program does.
 79+
 80+ 1. You may copy and distribute verbatim copies of the Program's
 81+source code as you receive it, in any medium, provided that you
 82+conspicuously and appropriately publish on each copy an appropriate
 83+copyright notice and disclaimer of warranty; keep intact all the
 84+notices that refer to this License and to the absence of any warranty;
 85+and give any other recipients of the Program a copy of this License
 86+along with the Program.
 87+
 88+You may charge a fee for the physical act of transferring a copy, and
 89+you may at your option offer warranty protection in exchange for a fee.
 90+
 91+ 2. You may modify your copy or copies of the Program or any portion
 92+of it, thus forming a work based on the Program, and copy and
 93+distribute such modifications or work under the terms of Section 1
 94+above, provided that you also meet all of these conditions:
 95+
 96+ a) You must cause the modified files to carry prominent notices
 97+ stating that you changed the files and the date of any change.
 98+
 99+ b) You must cause any work that you distribute or publish, that in
 100+ whole or in part contains or is derived from the Program or any
 101+ part thereof, to be licensed as a whole at no charge to all third
 102+ parties under the terms of this License.
 103+
 104+ c) If the modified program normally reads commands interactively
 105+ when run, you must cause it, when started running for such
 106+ interactive use in the most ordinary way, to print or display an
 107+ announcement including an appropriate copyright notice and a
 108+ notice that there is no warranty (or else, saying that you provide
 109+ a warranty) and that users may redistribute the program under
 110+ these conditions, and telling the user how to view a copy of this
 111+ License. (Exception: if the Program itself is interactive but
 112+ does not normally print such an announcement, your work based on
 113+ the Program is not required to print an announcement.)
 114+
 115+These requirements apply to the modified work as a whole. If
 116+identifiable sections of that work are not derived from the Program,
 117+and can be reasonably considered independent and separate works in
 118+themselves, then this License, and its terms, do not apply to those
 119+sections when you distribute them as separate works. But when you
 120+distribute the same sections as part of a whole which is a work based
 121+on the Program, the distribution of the whole must be on the terms of
 122+this License, whose permissions for other licensees extend to the
 123+entire whole, and thus to each and every part regardless of who wrote it.
 124+
 125+Thus, it is not the intent of this section to claim rights or contest
 126+your rights to work written entirely by you; rather, the intent is to
 127+exercise the right to control the distribution of derivative or
 128+collective works based on the Program.
 129+
 130+In addition, mere aggregation of another work not based on the Program
 131+with the Program (or with a work based on the Program) on a volume of
 132+a storage or distribution medium does not bring the other work under
 133+the scope of this License.
 134+
 135+ 3. You may copy and distribute the Program (or a work based on it,
 136+under Section 2) in object code or executable form under the terms of
 137+Sections 1 and 2 above provided that you also do one of the following:
 138+
 139+ a) Accompany it with the complete corresponding machine-readable
 140+ source code, which must be distributed under the terms of Sections
 141+ 1 and 2 above on a medium customarily used for software interchange; or,
 142+
 143+ b) Accompany it with a written offer, valid for at least three
 144+ years, to give any third party, for a charge no more than your
 145+ cost of physically performing source distribution, a complete
 146+ machine-readable copy of the corresponding source code, to be
 147+ distributed under the terms of Sections 1 and 2 above on a medium
 148+ customarily used for software interchange; or,
 149+
 150+ c) Accompany it with the information you received as to the offer
 151+ to distribute corresponding source code. (This alternative is
 152+ allowed only for noncommercial distribution and only if you
 153+ received the program in object code or executable form with such
 154+ an offer, in accord with Subsection b above.)
 155+
 156+The source code for a work means the preferred form of the work for
 157+making modifications to it. For an executable work, complete source
 158+code means all the source code for all modules it contains, plus any
 159+associated interface definition files, plus the scripts used to
 160+control compilation and installation of the executable. However, as a
 161+special exception, the source code distributed need not include
 162+anything that is normally distributed (in either source or binary
 163+form) with the major components (compiler, kernel, and so on) of the
 164+operating system on which the executable runs, unless that component
 165+itself accompanies the executable.
 166+
 167+If distribution of executable or object code is made by offering
 168+access to copy from a designated place, then offering equivalent
 169+access to copy the source code from the same place counts as
 170+distribution of the source code, even though third parties are not
 171+compelled to copy the source along with the object code.
 172+
 173+ 4. You may not copy, modify, sublicense, or distribute the Program
 174+except as expressly provided under this License. Any attempt
 175+otherwise to copy, modify, sublicense or distribute the Program is
 176+void, and will automatically terminate your rights under this License.
 177+However, parties who have received copies, or rights, from you under
 178+this License will not have their licenses terminated so long as such
 179+parties remain in full compliance.
 180+
 181+ 5. You are not required to accept this License, since you have not
 182+signed it. However, nothing else grants you permission to modify or
 183+distribute the Program or its derivative works. These actions are
 184+prohibited by law if you do not accept this License. Therefore, by
 185+modifying or distributing the Program (or any work based on the
 186+Program), you indicate your acceptance of this License to do so, and
 187+all its terms and conditions for copying, distributing or modifying
 188+the Program or works based on it.
 189+
 190+ 6. Each time you redistribute the Program (or any work based on the
 191+Program), the recipient automatically receives a license from the
 192+original licensor to copy, distribute or modify the Program subject to
 193+these terms and conditions. You may not impose any further
 194+restrictions on the recipients' exercise of the rights granted herein.
 195+You are not responsible for enforcing compliance by third parties to
 196+this License.
 197+
 198+ 7. If, as a consequence of a court judgment or allegation of patent
 199+infringement or for any other reason (not limited to patent issues),
 200+conditions are imposed on you (whether by court order, agreement or
 201+otherwise) that contradict the conditions of this License, they do not
 202+excuse you from the conditions of this License. If you cannot
 203+distribute so as to satisfy simultaneously your obligations under this
 204+License and any other pertinent obligations, then as a consequence you
 205+may not distribute the Program at all. For example, if a patent
 206+license would not permit royalty-free redistribution of the Program by
 207+all those who receive copies directly or indirectly through you, then
 208+the only way you could satisfy both it and this License would be to
 209+refrain entirely from distribution of the Program.
 210+
 211+If any portion of this section is held invalid or unenforceable under
 212+any particular circumstance, the balance of the section is intended to
 213+apply and the section as a whole is intended to apply in other
 214+circumstances.
 215+
 216+It is not the purpose of this section to induce you to infringe any
 217+patents or other property right claims or to contest validity of any
 218+such claims; this section has the sole purpose of protecting the
 219+integrity of the free software distribution system, which is
 220+implemented by public license practices. Many people have made
 221+generous contributions to the wide range of software distributed
 222+through that system in reliance on consistent application of that
 223+system; it is up to the author/donor to decide if he or she is willing
 224+to distribute software through any other system and a licensee cannot
 225+impose that choice.
 226+
 227+This section is intended to make thoroughly clear what is believed to
 228+be a consequence of the rest of this License.
 229+
 230+ 8. If the distribution and/or use of the Program is restricted in
 231+certain countries either by patents or by copyrighted interfaces, the
 232+original copyright holder who places the Program under this License
 233+may add an explicit geographical distribution limitation excluding
 234+those countries, so that distribution is permitted only in or among
 235+countries not thus excluded. In such case, this License incorporates
 236+the limitation as if written in the body of this License.
 237+
 238+ 9. The Free Software Foundation may publish revised and/or new versions
 239+of the General Public License from time to time. Such new versions will
 240+be similar in spirit to the present version, but may differ in detail to
 241+address new problems or concerns.
 242+
 243+Each version is given a distinguishing version number. If the Program
 244+specifies a version number of this License which applies to it and "any
 245+later version", you have the option of following the terms and conditions
 246+either of that version or of any later version published by the Free
 247+Software Foundation. If the Program does not specify a version number of
 248+this License, you may choose any version ever published by the Free Software
 249+Foundation.
 250+
 251+ 10. If you wish to incorporate parts of the Program into other free
 252+programs whose distribution conditions are different, write to the author
 253+to ask for permission. For software which is copyrighted by the Free
 254+Software Foundation, write to the Free Software Foundation; we sometimes
 255+make exceptions for this. Our decision will be guided by the two goals
 256+of preserving the free status of all derivatives of our free software and
 257+of promoting the sharing and reuse of software generally.
 258+
 259+ NO WARRANTY
 260+
 261+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 262+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
 263+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
 264+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
 265+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 266+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
 267+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
 268+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
 269+REPAIR OR CORRECTION.
 270+
 271+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 272+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
 273+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
 274+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
 275+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
 276+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
 277+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
 278+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 279+POSSIBILITY OF SUCH DAMAGES.
 280+
 281+ END OF TERMS AND CONDITIONS
 282+
 283+ How to Apply These Terms to Your New Programs
 284+
 285+ If you develop a new program, and you want it to be of the greatest
 286+possible use to the public, the best way to achieve this is to make it
 287+free software which everyone can redistribute and change under these terms.
 288+
 289+ To do so, attach the following notices to the program. It is safest
 290+to attach them to the start of each source file to most effectively
 291+convey the exclusion of warranty; and each file should have at least
 292+the "copyright" line and a pointer to where the full notice is found.
 293+
 294+ <one line to give the program's name and a brief idea of what it does.>
 295+ Copyright (C) <year> <name of author>
 296+
 297+ This program is free software; you can redistribute it and/or modify
 298+ it under the terms of the GNU General Public License as published by
 299+ the Free Software Foundation; either version 2 of the License, or
 300+ (at your option) any later version.
 301+
 302+ This program is distributed in the hope that it will be useful,
 303+ but WITHOUT ANY WARRANTY; without even the implied warranty of
 304+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 305+ GNU General Public License for more details.
 306+
 307+ You should have received a copy of the GNU General Public License along
 308+ with this program; if not, write to the Free Software Foundation, Inc.,
 309+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 310+
 311+Also add information on how to contact you by electronic and paper mail.
 312+
 313+If the program is interactive, make it output a short notice like this
 314+when it starts in an interactive mode:
 315+
 316+ Gnomovision version 69, Copyright (C) year name of author
 317+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
 318+ This is free software, and you are welcome to redistribute it
 319+ under certain conditions; type `show c' for details.
 320+
 321+The hypothetical commands `show w' and `show c' should show the appropriate
 322+parts of the General Public License. Of course, the commands you use may
 323+be called something other than `show w' and `show c'; they could even be
 324+mouse-clicks or menu items--whatever suits your program.
 325+
 326+You should also get your employer (if you work as a programmer) or your
 327+school, if any, to sign a "copyright disclaimer" for the program, if
 328+necessary. Here is a sample; alter the names:
 329+
 330+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
 331+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
 332+
 333+ <signature of Ty Coon>, 1 April 1989
 334+ Ty Coon, President of Vice
 335+
 336+This General Public License does not permit incorporating your program into
 337+proprietary programs. If your program is a subroutine library, you may
 338+consider it more useful to permit linking proprietary applications with the
 339+library. If this is what you want to do, use the GNU Lesser General
 340+Public License instead of this License.
Index: trunk/extensions/WikiMiniAtlas/server/mapniktile.cpp
@@ -0,0 +1,639 @@
 2+/*****************************************************************************
 3+ *
 4+ * mapniktile.cc - Generates maptiles for the WikiMiniAtlas
 5+ *
 6+ * (c) 2007 by Daniel Schwen (dschwen)
 7+ *
 8+ * This file is based on an example for Mapnik (c++ mapping toolkit)
 9+ * Copyright (C) 2006 Artem Pavlenko
 10+ *
 11+ * This library is free software; you can redistribute it and/or
 12+ * modify it under the terms of the GNU Lesser General Public
 13+ * License as published by the Free Software Foundation; either
 14+ * version 2.1 of the License, or (at your option) any later version.
 15+ *
 16+ * This library is distributed in the hope that it will be useful,
 17+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 18+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 19+ * Lesser General Public License for more details.
 20+ *
 21+ * You should have received a copy of the GNU Lesser General Public
 22+ * License along with this library; if not, write to the Free Software
 23+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 24+ *
 25+ *****************************************************************************/
 26+// $Id$
 27+
 28+#include <mapnik/map.hpp>
 29+#include <mapnik/datasource_cache.hpp>
 30+#include <mapnik/font_engine_freetype.hpp>
 31+#include <mapnik/agg_renderer.hpp>
 32+#include <mapnik/filter_factory.hpp>
 33+#include <mapnik/color_factory.hpp>
 34+#include <mapnik/image_util.hpp>
 35+
 36+#include <iostream>
 37+
 38+using namespace mapnik;
 39+
 40+int main ( int argc , char** argv)
 41+{
 42+ std::cout << argc << "\n";
 43+ int zoom = 0;
 44+ if( argc == 5 ) zoom = atoi(argv[1]);
 45+
 46+ datasource_cache::instance()->register_datasources("/usr/lib/mapnik/input");
 47+ freetype_engine::instance()->register_font("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf");
 48+
 49+ Map m(128,128);
 50+
 51+ // (1.0,1.0,0.816) land =
 52+ // (0.62,0.78,0.953) water =
 53+
 54+ //m.setBackground(color_factory::from_string("white"));
 55+ m.setBackground( Color(250, 250, 208) );
 56+
 57+ // create styles
 58+
 59+ // Water (polygon)
 60+ feature_type_style waterpoly_style;
 61+ rule_type waterpoly_rule;
 62+ waterpoly_rule.append(polygon_symbolizer(Color(158, 199, 243)));
 63+ waterpoly_rule.append(line_symbolizer(Color(158, 199, 243)));
 64+ waterpoly_style.add_rule(waterpoly_rule);
 65+ m.insert_style("ocean",waterpoly_style);
 66+
 67+
 68+ // Nationalpark (polygon)
 69+ feature_type_style nps_style;
 70+ rule_type nps_rule;
 71+ polygon_symbolizer nps_fill(Color(0, 150, 0));
 72+ nps_fill.set_opacity(0.2);
 73+ nps_rule.append(nps_fill);
 74+ nps_style.add_rule(nps_rule);
 75+ m.insert_style("usnps",nps_style);
 76+
 77+
 78+ // Landmass (polygon)
 79+ feature_type_style landpoly_style;
 80+ rule_type landpoly_rule;
 81+ landpoly_rule.append(polygon_symbolizer(Color(250, 250, 208)));
 82+ landpoly_style.add_rule(landpoly_rule);
 83+ m.insert_style("landmass",landpoly_style);
 84+
 85+
 86+ // Lakes (polygon)
 87+ feature_type_style lakepoly_style;
 88+ rule_type lakepoly_rule;
 89+ lakepoly_rule.set_filter(create_filter("[hyc] = 8 and [f_code] = 'BH000'"));
 90+ lakepoly_rule.append(polygon_symbolizer(Color(158, 199, 243)));
 91+ lakepoly_style.add_rule(lakepoly_rule);
 92+ m.insert_style("lakes",lakepoly_style);
 93+
 94+
 95+ // Grassland (polygon)
 96+ feature_type_style grasspoly_style;
 97+ rule_type grasspoly_rule;
 98+ grasspoly_rule.append(polygon_symbolizer(Color(208, 250, 208)));
 99+ grasspoly_style.add_rule(grasspoly_rule);
 100+ m.insert_style("grassland",grasspoly_style);
 101+
 102+
 103+ // Trees (polygon)
 104+ feature_type_style treepoly_style;
 105+ rule_type treepoly_rule;
 106+ treepoly_rule.append(polygon_symbolizer(Color(190, 240, 190)));
 107+ treepoly_style.add_rule(treepoly_rule);
 108+ m.insert_style("trees",treepoly_style);
 109+
 110+
 111+ // Landice (polygon)
 112+ feature_type_style landice_style;
 113+ rule_type landice_rule;
 114+ //qcdrain_rule.set_filter(create_filter("[HYC] = 8"));
 115+ landice_rule.append(polygon_symbolizer(Color(255, 255, 255)));
 116+ landice_style.add_rule(landice_rule);
 117+ m.insert_style("landice",landice_style);
 118+
 119+
 120+ // Seaice (shelf) (polygon)
 121+ feature_type_style seaice_style;
 122+ rule_type seaice_rule;
 123+ seaice_rule.set_filter(create_filter("[f_code] = 'BJ065'"));
 124+ seaice_rule.append(polygon_symbolizer(Color(207, 227, 249)));
 125+ seaice_style.add_rule(seaice_rule);
 126+ m.insert_style("seaice",seaice_style);
 127+
 128+ // Seaice (pack) (polygon)
 129+ feature_type_style seaice_style2;
 130+ rule_type seaice_rule2;
 131+ seaice_rule2.set_filter(create_filter("[f_code] = 'BJ070'"));
 132+ seaice_rule2.append(polygon_symbolizer(Color(182, 213, 246)));
 133+ seaice_style2.add_rule(seaice_rule2);
 134+ m.insert_style("seaice2",seaice_style);
 135+
 136+
 137+ // Builtup (polygon)
 138+ feature_type_style builtup_style;
 139+ rule_type builtup_rule;
 140+ //qcdrain_rule.set_filter(create_filter("[HYC] = 8"));
 141+ builtup_rule.append(polygon_symbolizer(Color(208, 208, 208)));
 142+ builtup_style.add_rule(builtup_rule);
 143+ m.insert_style("builtup",builtup_style);
 144+
 145+
 146+ // Canals (polygon)
 147+ feature_type_style canal_style;
 148+ rule_type canal_rule;
 149+ canal_rule.set_filter(create_filter("[loc] = 8 and ( [exs] = 5 or [exs] = 1 )"));
 150+ canal_rule.append(line_symbolizer(Color(158, 199, 243), 2.0 ));
 151+ canal_style.add_rule(canal_rule);
 152+ m.insert_style("canal",canal_style);
 153+
 154+ // Waterways (polygon)
 155+ feature_type_style waterway_style;
 156+ rule_type waterway_rule;
 157+ waterway_rule.set_filter(create_filter("[hyc] = 8"));
 158+ waterway_rule.append(line_symbolizer(Color(126, 159, 194)));
 159+ waterway_style.add_rule(waterway_rule);
 160+ m.insert_style("waterway",waterway_style);
 161+
 162+ // intermittent Waterways (polygon)
 163+ feature_type_style iwaterway_style;
 164+ rule_type iwaterway_rule;
 165+ stroke iwaterway_stk (Color(126, 159, 194),1.0);
 166+ iwaterway_stk.add_dash(2, 2);
 167+ iwaterway_rule.set_filter(create_filter("[hyc] = 6"));
 168+ iwaterway_rule.append(line_symbolizer(iwaterway_stk));
 169+ iwaterway_style.add_rule(iwaterway_rule);
 170+ m.insert_style("iwaterway",iwaterway_style);
 171+
 172+/*
 173+ // Misc structure (dam etc.) (polyline)
 174+ feature_type_style dam_style;
 175+ rule_type dam_rule;
 176+ dam_rule.append(line_symbolizer(Color(125, 125, 125),3.0));
 177+ dam_style.add_rule(dam_rule);
 178+ m.insert_style("dam",dam_style);
 179+*/
 180+
 181+ // Coastline
 182+ feature_type_style coast_style;
 183+ rule_type coast_rule;
 184+ coast_rule.append(line_symbolizer(Color(126, 159, 194),0.1));
 185+ coast_style.add_rule(coast_rule);
 186+ m.insert_style("coast",coast_style);
 187+
 188+ // Ferry
 189+ feature_type_style ferry_style;
 190+ rule_type ferry_rule;
 191+ ferry_rule.set_filter(create_filter("[f_code] = 'AQ070'"));
 192+ ferry_rule.append(line_symbolizer(Color(126, 159, 194),2.0));
 193+ ferry_style.add_rule(ferry_rule);
 194+ m.insert_style("ferry",ferry_style);
 195+
 196+
 197+ // Bridge/Causeway
 198+ feature_type_style causeway_style;
 199+ rule_type causeway_rule;
 200+ causeway_rule.set_filter(create_filter("[f_code] = 'AQ064' and [tuc] = 3"));
 201+ causeway_rule.append(line_symbolizer(Color(126, 159, 194),5.0));
 202+ causeway_rule.append(line_symbolizer(Color(255, 255, 255),3.0));
 203+ causeway_style.add_rule(causeway_rule);
 204+ m.insert_style("causeway",causeway_style);
 205+
 206+
 207+ // Borders (polyline)
 208+ feature_type_style border1_style;
 209+ /*stroke border1_stk (Color(0,0,0),0.5);
 210+ border1_stk.add_dash(8, 4);
 211+ border1_stk.add_dash(2, 2);
 212+ border1_stk.add_dash(2, 2);*/
 213+ rule_type border1_rule;
 214+ border1_rule.set_filter(create_filter("[use] = 23"));
 215+ //border1_rule.append(line_symbolizer(border1_stk));
 216+ border1_rule.append(line_symbolizer(Color(108,108,108),0.5));
 217+ border1_style.add_rule(border1_rule);
 218+ m.insert_style("border1",border1_style);
 219+
 220+ // Borders regional (polyline)
 221+ feature_type_style border2_style;
 222+ rule_type border2_rule;
 223+ border2_rule.set_filter(create_filter("[use] = 26"));
 224+ border2_rule.append(line_symbolizer(Color(108,108,108),0.15));
 225+ border2_style.add_rule(border2_rule);
 226+ m.insert_style("border2",border2_style);
 227+
 228+
 229+ // Railroads (polyline)
 230+ feature_type_style raillines_style;
 231+ rule_type raillines_rule;
 232+ raillines_rule.set_filter(create_filter("[exs] = 28 or [exs] = 5 or [exs] = 55"));
 233+ stroke raillines_stk( Color(255,255,255), 1.0 );
 234+ raillines_stk.add_dash(3, 3);
 235+ rule_type raillines_rule2;
 236+ raillines_rule.append(line_symbolizer( Color(150,150,150), 2.0) );
 237+ raillines_rule.append( line_symbolizer( raillines_stk ) );
 238+ raillines_style.add_rule(raillines_rule);
 239+ m.insert_style("raillines",raillines_style);
 240+
 241+ // Railroadbridge (polyline)
 242+ feature_type_style raillines_bridge_style;
 243+ rule_type raillines_bridge_rule;
 244+ raillines_bridge_rule.set_filter(create_filter("[f_code] = 'AQ064' and [tuc] = 4"));
 245+ raillines_bridge_rule.append(line_symbolizer( Color(126, 159, 194), 2.0) );
 246+ raillines_bridge_rule.append( line_symbolizer( raillines_stk ) );
 247+ raillines_bridge_style.add_rule(raillines_bridge_rule);
 248+ m.insert_style("raillines-bridge",raillines_bridge_style);
 249+
 250+
 251+ // Roads 1 (The big orange ones, the highways)
 252+ feature_type_style roads1_style_1;
 253+ rule_type roads1_rule_1;
 254+ roads1_rule_1.set_filter(create_filter("[med] = 1"));
 255+ stroke roads1_rule_stk_1(Color(188,149,28),7.0);
 256+ roads1_rule_stk_1.set_line_cap(ROUND_CAP);
 257+ roads1_rule_stk_1.set_line_join(ROUND_JOIN);
 258+ roads1_rule_1.append(line_symbolizer(roads1_rule_stk_1));
 259+ roads1_style_1.add_rule(roads1_rule_1);
 260+ m.insert_style("highway-border", roads1_style_1);
 261+
 262+ feature_type_style roads1_style_2;
 263+ rule_type roads1_rule_2;
 264+ roads1_rule_2.set_filter(create_filter("[med] = 1"));
 265+ stroke roads1_rule_stk_2(Color(242,191,36),5.0);
 266+ roads1_rule_stk_2.set_line_cap(ROUND_CAP);
 267+ roads1_rule_stk_2.set_line_join(ROUND_JOIN);
 268+ roads1_rule_2.append(line_symbolizer(roads1_rule_stk_2));
 269+ roads1_style_2.add_rule(roads1_rule_2);
 270+ m.insert_style("highway-fill", roads1_style_2);
 271+
 272+/*
 273+ // Roads 3 and 4 (The "grey" roads)
 274+ feature_type_style roads34_style;
 275+ rule_type roads34_rule;
 276+ roads34_rule.set_filter(create_filter("[CLASS] = 3 or [CLASS] = 4"));
 277+ stroke roads34_rule_stk(Color(171,158,137),2.0);
 278+ roads34_rule_stk.set_line_cap(ROUND_CAP);
 279+ roads34_rule_stk.set_line_join(ROUND_JOIN);
 280+ roads34_rule.append(line_symbolizer(roads34_rule_stk));
 281+ roads34_style.add_rule(roads34_rule);
 282+
 283+ m.insert_style("smallroads",roads34_style);
 284+*/
 285+
 286+ // Roads 2 (The thin yellow ones)
 287+ feature_type_style roads2_style_1;
 288+ rule_type roads2_rule_1;
 289+ roads2_rule_1.set_filter(create_filter("[med] = 2"));
 290+ stroke roads2_rule_stk_1(Color(171,158,137),4.0);
 291+ roads2_rule_stk_1.set_line_cap(ROUND_CAP);
 292+ roads2_rule_stk_1.set_line_join(ROUND_JOIN);
 293+ roads2_rule_1.append(line_symbolizer(roads2_rule_stk_1));
 294+ roads2_style_1.add_rule(roads2_rule_1);
 295+ m.insert_style("road-border", roads2_style_1);
 296+
 297+ feature_type_style roads2_style_2;
 298+ rule_type roads2_rule_2;
 299+ roads2_rule_2.set_filter(create_filter("[med] = 2"));
 300+ stroke roads2_rule_stk_2(Color(255,250,115),2.0);
 301+ roads2_rule_stk_2.set_line_cap(ROUND_CAP);
 302+ roads2_rule_stk_2.set_line_join(ROUND_JOIN);
 303+ roads2_rule_2.append(line_symbolizer(roads2_rule_stk_2));
 304+ roads2_style_2.add_rule(roads2_rule_2);
 305+ m.insert_style("road-fill", roads2_style_2);
 306+
 307+/*
 308+ // Populated Places
 309+
 310+ feature_type_style popplaces_style;
 311+ rule_type popplaces_rule;
 312+ text_symbolizer popplaces_text_symbolizer("GEONAME","DejaVu Sans Book",10,Color(0,0,0));
 313+ popplaces_text_symbolizer.set_halo_fill(Color(255,255,200));
 314+ popplaces_text_symbolizer.set_halo_radius(1);
 315+ popplaces_rule.append(popplaces_text_symbolizer);
 316+ popplaces_style.add_rule(popplaces_rule);
 317+
 318+ m.insert_style("popplaces",popplaces_style );
 319+*/
 320+ // Layers
 321+
 322+ // Landmasses polygons
 323+ /*
 324+ {
 325+ parameters p;
 326+ p["type"]="shape";
 327+ p["file"]="shp/grounda";
 328+
 329+ Layer lyr("Landmass");
 330+ lyr.set_datasource(datasource_cache::instance()->create(p));
 331+ lyr.add_style("landmass");
 332+ m.addLayer(lyr);
 333+ }
 334+ */
 335+
 336+ // Water polygons
 337+ {
 338+ parameters p;
 339+ p["type"]="shape";
 340+ p["file"]="shp/oceansea";
 341+
 342+ Layer lyr("Ocean");
 343+ lyr.set_datasource(datasource_cache::instance()->create(p));
 344+ lyr.add_style("ocean");
 345+ m.addLayer(lyr);
 346+ }
 347+
 348+ // Shelf- and Packice
 349+ {
 350+ parameters p;
 351+ p["type"]="shape";
 352+ p["file"]="shp/seaicea";
 353+
 354+ Layer lyr("Seaice");
 355+ lyr.set_datasource(datasource_cache::instance()->create(p));
 356+ lyr.add_style("seaice");
 357+ lyr.add_style("seaice2");
 358+ m.addLayer(lyr);
 359+ }
 360+
 361+ // Coastlines
 362+ {
 363+ parameters p;
 364+ p["type"]="shape";
 365+ p["file"]="shp/coastl";
 366+
 367+ Layer lyr("Coastlines");
 368+ lyr.set_datasource(datasource_cache::instance()->create(p));
 369+ lyr.add_style("coast");
 370+ m.addLayer(lyr);
 371+ }
 372+
 373+ // Grassland polygons
 374+ {
 375+ parameters p;
 376+ p["type"]="shape";
 377+ p["file"]="shp/grassa";
 378+
 379+ Layer lyr("Grassland");
 380+ lyr.set_datasource(datasource_cache::instance()->create(p));
 381+ lyr.add_style("grassland");
 382+ m.addLayer(lyr);
 383+ }
 384+
 385+ // Trees polygons
 386+ {
 387+ parameters p;
 388+ p["type"]="shape";
 389+ p["file"]="shp/treesa";
 390+
 391+ Layer lyr("Trees");
 392+ lyr.set_datasource(datasource_cache::instance()->create(p));
 393+ lyr.add_style("trees");
 394+ m.addLayer(lyr);
 395+ }
 396+
 397+ // Lakes polygons
 398+ {
 399+ parameters p;
 400+ p["type"]="shape";
 401+ p["file"]="shp/inwatera";
 402+
 403+ Layer lyr("Lakes");
 404+ lyr.set_datasource(datasource_cache::instance()->create(p));
 405+ lyr.add_style("lakes");
 406+ m.addLayer(lyr);
 407+ }
 408+
 409+ // Landice
 410+ {
 411+ parameters p;
 412+ p["type"]="shape";
 413+ p["file"]="shp/landicea";
 414+
 415+ Layer lyr("Landice");
 416+ lyr.set_datasource(datasource_cache::instance()->create(p));
 417+ lyr.add_style("landice");
 418+ m.addLayer(lyr);
 419+ }
 420+
 421+ // Builtup
 422+ {
 423+ parameters p;
 424+ p["type"]="shape";
 425+ p["file"]="shp/builtupa";
 426+
 427+ Layer lyr("Built-up Areas");
 428+ lyr.set_datasource(datasource_cache::instance()->create(p));
 429+ lyr.add_style("builtup");
 430+ m.addLayer(lyr);
 431+ }
 432+
 433+ // Streams
 434+ if(zoom >= 8 ) {
 435+ parameters p;
 436+ p["type"]="shape";
 437+ p["file"]="shp/watrcrsl";
 438+
 439+ Layer lyr("Streams");
 440+ lyr.set_datasource(datasource_cache::instance()->create(p));
 441+ lyr.add_style("waterway");
 442+ lyr.add_style("iwaterway");
 443+ m.addLayer(lyr);
 444+ }
 445+
 446+ // Regional Borders
 447+ {
 448+ parameters p;
 449+ p["type"]="shape";
 450+ p["file"]="shp/polbndl";
 451+
 452+ Layer lyr("Regional Borders");
 453+ lyr.set_datasource(datasource_cache::instance()->create(p));
 454+ lyr.add_style("border2");
 455+ lyr.add_style("border1");
 456+ m.addLayer(lyr);
 457+ }
 458+
 459+ // National Parks
 460+ if(zoom >= 0 ) {
 461+ parameters p;
 462+ p["type"]="shape";
 463+ p["file"]="shp/other/nps_boundary";
 464+
 465+ Layer lyr("National Parks");
 466+ lyr.set_datasource(datasource_cache::instance()->create(p));
 467+ lyr.add_style("usnps");
 468+ m.addLayer(lyr);
 469+ }
 470+
 471+ // Canals
 472+ if(zoom >= 8 ) {
 473+ parameters p;
 474+ p["type"]="shape";
 475+ p["file"]="shp/aquecanl";
 476+
 477+ Layer lyr("Canals");
 478+ lyr.set_datasource(datasource_cache::instance()->create(p));
 479+ lyr.add_style("canal");
 480+ m.addLayer(lyr);
 481+ }
 482+
 483+ // Ferry Lines, Railroadbridges, Causeways
 484+ if(zoom >= 8 ) {
 485+ parameters p;
 486+ p["type"]="shape";
 487+ p["file"]="shp/transtrl";
 488+
 489+ Layer lyr("Ferry Lines");
 490+ lyr.set_datasource(datasource_cache::instance()->create(p));
 491+ lyr.add_style("ferry");
 492+ //lyr.add_style("raillines-bridge");
 493+ //lyr.add_style("causeway");
 494+ m.addLayer(lyr);
 495+ }
 496+
 497+ // Railroads
 498+ if(zoom >= 8 ) {
 499+ {
 500+ parameters p;
 501+ p["type"]="shape";
 502+ p["file"]="shp/railrdl";
 503+
 504+ Layer lyr("Railroads");
 505+ lyr.set_datasource(datasource_cache::instance()->create(p));
 506+ lyr.add_style("raillines");
 507+ m.addLayer(lyr);
 508+ }
 509+ }
 510+
 511+ // Roads without median
 512+ if(zoom >= 8 ) {
 513+ parameters p;
 514+ p["type"]="shape";
 515+ p["file"]="shp/roadl";
 516+
 517+ Layer lyr("Highway-border");
 518+ lyr.set_datasource(datasource_cache::instance()->create(p));
 519+ lyr.add_style("road-border");
 520+ lyr.add_style("road-fill");
 521+ m.addLayer(lyr);
 522+ }
 523+
 524+ // Highways (roads with median)
 525+ if(zoom >= 8 ) {
 526+ parameters p;
 527+ p["type"]="shape";
 528+ p["file"]="shp/roadl";
 529+
 530+ Layer lyr("Highway-border");
 531+ lyr.set_datasource(datasource_cache::instance()->create(p));
 532+ lyr.add_style("highway-border");
 533+ lyr.add_style("highway-fill");
 534+ m.addLayer(lyr);
 535+ }
 536+
 537+
 538+/*
 539+ // Provincial boundaries
 540+ {
 541+ parameters p;
 542+ p["type"]="shape";
 543+ p["file"]="../data/boundaries_l";
 544+ Layer lyr("Provincial borders");
 545+ lyr.set_datasource(datasource_cache::instance()->create(p));
 546+ lyr.add_style("provlines");
 547+ m.addLayer(lyr);
 548+ }
 549+
 550+ // Roads
 551+ {
 552+ parameters p;
 553+ p["type"]="shape";
 554+ p["file"]="../data/roads";
 555+ Layer lyr("Roads");
 556+ lyr.set_datasource(datasource_cache::instance()->create(p));
 557+ lyr.add_style("smallroads");
 558+ lyr.add_style("road-border");
 559+ lyr.add_style("road-fill");
 560+ lyr.add_style("highway-border");
 561+ lyr.add_style("highway-fill");
 562+
 563+ m.addLayer(lyr);
 564+ }
 565+ // popplaces
 566+ {
 567+ parameters p;
 568+ p["type"]="shape";
 569+ p["file"]="../data/popplaces";
 570+ Layer lyr("Populated Places");
 571+ lyr.set_datasource(datasource_cache::instance()->create(p));
 572+ lyr.add_style("popplaces");
 573+ m.addLayer(lyr);
 574+ }
 575+*/
 576+ //m.zoomToBox(Envelope<double>(1105120.04127408,-247003.813399447,
 577+ // 1906357.31328276,-25098.593149577));
 578+ //m.zoomToBox(Envelope<double>(0,0,90,90));
 579+
 580+ Image32 buf(m.getWidth(),m.getHeight());
 581+
 582+ double bx1,by1,bx2,by2;
 583+ int xx;
 584+ std::string base_dir = "tiles/mapnik";
 585+ std::stringstream fname;
 586+
 587+ if( argc == 5 )
 588+ {
 589+ int z = zoom;
 590+ int y = atoi(argv[2]);
 591+ int x = atoi(argv[3]);
 592+
 593+ std::cout << "z=" << z << ", y=" << y << ", x=" << x << ", fname=" << argv[4] << std::endl;
 594+
 595+ if( x >= 3*(1<<z) ) xx = x - 6*(1<<z);
 596+ else xx = x;
 597+
 598+ bx1 = xx*60.0/(1<<z);
 599+ by1 = 90.0 - ( ((y+1.0)*60.0) / (1<<z) );
 600+ bx2 = (xx+1) * 60.0 / (1<<z);
 601+ by2 = 90.0 - ( (y*60.0) / (1<<z) );
 602+
 603+ m.zoomToBox(Envelope<double>(bx1,by1,bx2,by2));
 604+
 605+ agg_renderer<Image32> ren(m,buf);
 606+ ren.apply();
 607+
 608+ save_to_file<ImageData32>( argv[4], "png", buf.data() );
 609+ }
 610+ else
 611+ for( int z = 3; z<=6; z++)
 612+ for( int x = 0; x < 6*(1<<z); x++ )
 613+ for( int y = 0; y < 3*(1<<z); y++ )
 614+ {
 615+ fname.str("");
 616+ fname.clear();
 617+ fname << base_dir << (z+1) << "/tile_" << y << "_" << x << ".png";
 618+ std::cout << fname.str() << std::endl;
 619+
 620+ if( x >= 3*(1<<z) ) xx = x - 6*(1<<z);
 621+ else xx = x;
 622+
 623+ bx1 = xx*60.0/(1<<z);
 624+ by1 = 90.0 - ( ((y+1.0)*60.0) / (1<<z) );
 625+ bx2 = (xx+1) * 60.0 / (1<<z);
 626+ by2 = 90.0 - ( (y*60.0) / (1<<z) );
 627+
 628+ m.zoomToBox(Envelope<double>(bx1,by1,bx2,by2));
 629+
 630+ agg_renderer<Image32> ren(m,buf);
 631+ ren.apply();
 632+ //save_to_file<ImageData32>("demo.jpg","jpeg",buf.data());
 633+
 634+ save_to_file<ImageData32>( fname.str(), "png", buf.data() );
 635+ }
 636+
 637+ //$file = $dir.'cache/zoom'.$z.'/'.$x.'_'.$y.'_'.$z.'.jpg';
 638+
 639+ return EXIT_SUCCESS;
 640+}

Status & tagging log