Mapping

Show Only ...
Maps - Photos - Videos

30 Years of Nitrogen Fertilization in Spruce-Fir Forest – CompassLive

30 Years of Nitrogen Fertilization in Spruce-Fir Forest – CompassLive

"Rocks and sediments bind up almost 98 percent of all nitrogen. The remaining 2 percent is in motion, part of a global chemical cycle that includes humans, bacteria, plants, and the atmosphere.
“Plants need nitrogen to grow,” says U.S. Forest Service research ecologist Steve McNulty. “However, excess nitrogen can harm plants.”

"Nitrogen and sulfur can combine with oxygen to form nitrogen or sulfur oxides. These compounds become part of the atmosphere, where they react with water vapor and other elements. Eventually, the nitrogen and sulfur – now in the form of nitric and sulfuric acid – fall to the ground with the rain drops."

Trading One Bad Map for Another?

Trading One Bad Map for Another?

"Earlier this month, the social studies classrooms of Boston Public Schools underwent a slight but significant change in decor. Down came the Mercator Projection—a common choice of world maps for schools—which distorts the size of each land mass but keeps continental shapes intact. Up went a different map, the Peters, which stretches out the world in order to give each continent a proportionally accurate amount of room. On the Peters, Canada—so huge on the Mercator—shrinks to its proper size, while Africa, which the Mercator shows shrunk and jammed beneath a too-large Europe, stretches out."

Natural Earth

Natural Earth

"Natural Earth is a public domain map dataset available at 1:10m, 1:50m, and 1:110 million scales. Featuring tightly integrated vector and raster data, with Natural Earth you can make a variety of visually pleasing, well-crafted maps with cartography or GIS software."

How does GPS work?

How does GPS work?

The Global Positioning System (GPS) is a network of about 30 satellites orbiting the Earth at an altitude of 20,000 km. The system was originally developed by the US government for military navigation but now anyone with a GPS device, be it a SatNav, mobile phone or handheld GPS unit, can receive the radio signals that the satellites broadcast.

Wherever you are on the planet, at least four GPS satellites are ‘visible’ at any time. Each one transmits information about its position and the current time at regular intervals. These signals, travelling at the speed of light, are intercepted by your GPS receiver, which calculates how far away each satellite is based on how long it took for the messages to arrive.

Script for Downloading NYS DHES LiDAR and Creating Contours and Hillshades

I use this script for my various map making efforts when I use LiDAR data in making hillshades and contours. I have automated the calling of this script from QGIS by using PyQGIS plugin that I developed.

Here is a brief PHP script I use to download LiDAR data from NYGIS website. You simply supply it a list of quads on the command line like php getlidar.php u_3592573775_1m_DEM.img u_3600073175_1m_DEM.img then execute the below script. This script requires PHP and the dbase extension. If you use PHP7, you can download a version of dbase for PHP7 .

#!/usr/bin/php -q
 array_shift($argv); // remove program name

$lidarDir = "/home/andy/Documents/GIS.Data/lidar";

$tomerge = "";
$merged = "";
$conDir = "/tmp";

foreach ($argv as $quad) {
$wgetCommand = "wget -c -P $lidarDir \"ftp://ftporthos.dhses.ny.gov/lidar/nysdop/dem/$quad\"";
#echo "$wgetCommand\n";
system($wgetCommand);

$tomerge .= "$lidarDir/$quad ";

$merged = "merge".substr($quad,1,-4);
}

$mergeLidarCommand = "gdalwarp -co \"COMPRESS=LZW\" $tomerge $conDir/$merged.tif -r average -overwrite";
#echo "$mergeLidarCommand\n";
system($mergeLidarCommand);

// produce hillshade
system("gdaldem hillshade {$conDir}/{$merged}.tif {$conDir}/{$merged}hillshade.tif -z 2.0 -s 1.0 -az 315.0 -alt 45.0 -compute_edges");

// produce deeper hillshade
system("gdaldem hillshade {$conDir}/{$merged}.tif {$conDir}/{$merged}hillshade.6x.tif -z 6.0 -s 1.0 -az 315.0 -alt 45.0 -compute_edges &");

$minor = 5;
$major = 25;
$minorMeters = $minor * 0.3048;
$majorMeters = $major * 0.3048;

// produce contours
if (file_exists("{$conDir}/{$merged}{$major}ft-contour.shp")) {
unlink("{$conDir}/{$merged}{$major}ft-contour.shp");
}

if (file_exists("{$conDir}/{$merged}{$minor}ft-contour.shp")) {
unlink("{$conDir}/{$merged}{$minor}ft-contour.shp");
}

system("gdal_contour -a elev -i {$majorMeters} {$conDir}/{$merged}.tif {$conDir}/{$merged}{$major}ft-contour.shp");
system("gdal_contour -a elev -i {$minorMeters} {$conDir}/{$merged}.tif {$conDir}/{$merged}{$minor}ft-contour.shp");

// convert contour elevation to feet from meters

foreach (array("{$conDir}/{$merged}{$minor}ft-contour.dbf", "{$conDir}/{$merged}{$major}ft-contour.dbf") as $file) {
$db = dbase_open("$file", 2);

if ($db) {
$record_numbers = dbase_numrecords($db);
for ($i = 1; $i <= $record_numbers; $i++) {

// gets the old row
$row = dbase_get_record($db, $i);

// Update the date field with feet instead of meters
$row[1] = ceil($row[1] * 3.280839);

// remove the 'deleted' entry
unset($row['deleted']);

// replace record and save
dbase_replace_record($db, $row, $i);
}
}

dbase_close($db);
}