Information and Mapping in the Public Interest

Post on 24-Feb-2016

35 views 0 download

description

Information and Mapping in the Public Interest www.greeninfo.org www.mapsportal.org . Roadmap. 1. About GreenInfo Network Web maps, GIS, and the take-away message Examples Techniques and program code Greg Allensworth , Senior Web GIS Developer gregor@greeninfo.org. - PowerPoint PPT Presentation

Transcript of Information and Mapping in the Public Interest

Information and Mapping in the Public Interest

www.greeninfo.org www.mapsportal.org

Roadmap1

1. About GreenInfo Network

2. Web maps, GIS, and the take-away message

3. Examples

4. Techniques and program code

Greg Allensworth, Senior Web GIS Developer

gregor@greeninfo.org

GreenInfo Network2

Largest dedicated nonprofit GIS support group in U.S.

16 years, 500 organizations

14 staff, 20-30 projects at a time

Wide range of geospatial capacities

Extensive experience with foundations and mapping

1

Web maps,

GIS,

And the take-away message

Web Maps, GIS, and the take-away message2

1. The growth of the web. More interactive and engaging websites. Mobile devices. This means maps in the hands and eyes of billions.

2. Your map educates and it advocates, but…

1

1

1

Some examples

1

Looks great!

How do I do it?

TCPDF1

1. Library for producing PDFs in PHP.

2. Can generate sophisticated PDFs: pictures, borders, fills.

3. Can be tedious to adjust every pixel.

TCPDF2

require_once('tcpdf/config/lang/eng.php');require_once('tcpdf/tcpdf.php');

class MYPDF extends TCPDF { public function Header() { $this->Image(K_PATH_IMAGES.'legend.jpg', 5, 100); $this->Image(K_PATH_IMAGES.'report_header.png', 5, 5);

$arial = $this->addTTFfont('Arial.ttf', '', 'TrueType'); $this->SetFont($arial, '', 24, '', false); $this->SetX(90); $this->SetY(10); $this->Cell(642, 55, "Duck Populations by Parcel, 2012", 0, 0, 'C'); } public function Footer() { $footfont = $this->addTTFfont('impact.ttf', '', 'TrueType'); $this->SetFont($footfont, '', 10, '', false);

$date = date("F j, Y"); $this->Cell(762, 10, "Map created on $date. Disclaimer and so forth.", 0, 0, 'C'); }}

$pdf = new MYPDF(L, 'px', LETTER, true, 'UTF-8', false);$pdf->AddPage();$pdf->Image("/var/www/tmp/images.201209281107.jpg", 155, 70, 632, 507);

wkhtmltopdf / wkhtmltoimage1

1. Command-line utilities for Linux, using a real browser engine to draw pictures. Feed it a HTML file, it generates a PDF or JPEG file.

2. Supports JavaScript, including Google Maps, OpenLayers, et cetera.

3. Develop your PDF layouts in HTML, JavaScript, and CSS!

4. Command-line tool means saving HTML to a file, reading PDF as a file or capturing filename, …

wkhtmltopdf / wkhtmltoimage2

$html .= <<<ENDOFPDF<html><head><style type="text/css">@font-face { font-family:Calibri; src:url("file:/var/www/fonts/calibri.ttf"); format(TrueType);}body { font-size:12pt; font-family: Calibri; color:black;}@page { margin:0.25in 0.25in 0.25in 0.25in; width:8.5in; height:11.0in;}</style>

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script><script type="text/javascript" src="http://openlayers.org/dev/OpenLayers.js"></script>

<script type="text/javascript">$(document).ready(function () { var MAP = new OpenLayers.Map(‘map_canvas’, { other map setup options … }); var BBOX = new OpenLayers.Bounds({$_GET['west']},{$_GET['south']},{$_GET['east']},{$_GET['north']}); MAP.addLayer(new OpenLayers.Layer.Google("Streets", { } )); MAP.zoomToExtent(BBOX);});</script>

</head><body>

<div id="map_canvas"></div>

</body></html>ENDOFPDF?>

wkhtmltopdf / wkhtmltoimage3

// define a random directory name, and filenames under it// this allows a nice filename based on the County, without two people colliding if they ask for the same report$tempdir = md5(microtime() . mt_rand());mkdir("/var/www/tmp/$tempdir");$htmfile = sprintf("%s/ManagementOpportunitiesReport_%s.html", $tempdir, $county );$pdffile = sprintf("%s/ManagementOpportunitiesReport_%s.pdf" , $tempdir, $county );

// using a simple require() we can load our variables into the template easily// with a template engine like Smarty or CodeIgniter, this is even betterrequire 'report.pdf.php';

// save the HTML to a file// debugging is easy: simply print out the resulting HTML and see how it looks in our browserfile_put_contents($htmfile, $html);//print $html; exit;

// done, tell the browser where they can find the finished PDF// alternately, we could print Content-disposition headers to make the browser download the resulting PDF$command = escapeshellcmd("wkhtmltopdf --quiet --page-size letter $htmfile $pdffile");header(sprintf("Location: /tmp/%s", basename($pdffile) ));

PHPExcel1

1. PHP library for reading and generating Excel spreadsheets.

2. Supports modern XLSX format, advanced spreadsheet options: formulas, embedding of links, images, etc.

PHPExcel2

// load up PHPExcelrequire '/usr/lib/php/PHPExcel/Classes/PHPExcel.php';require '/usr/lib/php/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php';$xls = new PHPExcel();

// set auto-sizing and bold for all columns, then the column titles in row 1$xls->getActiveSheet()->setTitle('Species of Concern');$xls->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);$xls->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);$xls->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);$xls->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);

$xls->getActiveSheet()->getStyle("A1")->getFont()->setBold(true);$xls->getActiveSheet()->getStyle("B1")->getFont()->setBold(true);$xls->getActiveSheet()->getStyle("C1")->getFont()->setBold(true);$xls->getActiveSheet()->getStyle("D1")->getFont()->setBold(true);

$xls->getActiveSheet()->SetCellValue("A1", "COUNTY");$xls->getActiveSheet()->SetCellValue("B1", "SPECIES");$xls->getActiveSheet()->SetCellValue("C1", "PRIORITY");$xls->getActiveSheet()->SetCellValue("D1", "COMMENTS");

$row = 1;foreach ($allspecies as $spec) { $row++; $sheet->SetCellValue("A$row", $spec['location_name']); $sheet->SetCellValue("B$row", $spec['species_binominal']); $sheet->SetCellValue("C$row", $spec['priority_rating']); $sheet->SetCellValue("D$row", $spec['editornote']);}

// done! save it to disk, spit it out to the browser$tempfile = sprintf("/var/www/tmp/%s.xlsx", md5(mt_rand() . microtime() ) );$xls = new PHPExcel_Writer_Excel2007($xls);$xls->save($tempfile);header("Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml");header("Content-disposition: attachment; filename=\"SpeciesReport.xlsx\"");readfile($tempfile);

1

The take-away message