Just pretty pictures today.
Archive for the ‘Other’ Category
Cartographically Pleasing Vegetation Boundaries– with PovRay, PostGIS, and LiDAR
Posted by smathermather on May 18, 2012
Posted in Other, PostGIS, POV-Ray, Optics, Database, PostgreSQL, Cartography | Tagged: FOSS, PostGIS, GIS, POV-Ray, LiDAR, PostgreSQL, Analysis | Leave a Comment »
GeoExt/Mapfish MultiPage Prints
Posted by smathermather on May 11, 2012
I can’t remember if I posted on this, but there is a cool demo of a GeoExt multipage print here:
Definitely an interface for advanced users, but nice nonetheless.
Posted in Other | Leave a Comment »
Quick narrative on the distinction between leadership and power… .
Posted by smathermather on April 20, 2012
Leadership vs. Power:
Off topic here a bit. I think this post will end up categorized as “other”… .
A while back I met a fellow we’ll call Bob, who has spent a long time in the tech world, implementing, for example, some of the first closed circuit TVs for video feeds at a statehouse in the 1970s.
As he tells the story, the closed circuit TVs were so that House members would be able to keep track of developments on the House floor (e.g. know when it was time to vote) from their offices, therefore making them more efficient. Bob was the contractor managing the installation and decided it would be better for the democratic process if the governor also had access to that feed. So, he ran coax cable up to the governor’s office, installed a television, and turned the feed on.
Several hours later, he got a call from the Speaker of the House demanding that he turn off the feed to the governor. His answer: “Yes Maam.”
Two hours later, the Speaker called back, “Bob. Turn the feed back on.”
“Yes Maam.”
“And Bob.”
“Yes Maam?”
“You played me.”
“Yes Maam.”
Bob told this story as a parable of the distinction between power and leadership to his grandson. The Speaker of the House had power. Bob demonstrated leadership. I don’t know if his grandson was listening, but I know I was.
Posted in Other | Leave a Comment »
Mapfish Play cont. Musings on PostGIS driven Mapfish requests– Code only
Posted by smathermather on March 8, 2012
Code only post-- which only means it's been out here not-quite ready to post for a month. Now I post out of shear annoyance with myself... .
SELECT '{"units":"ft","srs":"EPSG:3734","layout":"1) LETTER 8.5x11 Portrait","dpi":300,"serviceParams":{"locale":"en_US"},"resourcesUrl":"http://maps/geoserver/www/printing","layersMerging":true,"preferredIntervalFractions":[0.1,0.2,0.4],"metaTitle":"GIS Print","metaAuthor":"","metaSubject":"GIS Print","metaKeywords":"","outputFilename":"cm_gis","legends":[{"name":"","classes":[{"name":"Reservation","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=reservation_bounds&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=unrestricted"]},{"name":"Restricted","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=reservation_bounds&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=restricted"]}]},{"name":"Detailed Hydro","classes":[{"name":"Ditch","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=detailed_hydro_view&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=cm_streams_ditch"]},{"name":"Non-Stream Waterway","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=detailed_hydro_view&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=cm_streams_ditch"]},{"name":"Stream","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=detailed_hydro_view&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=cm_streams_stream"]},{"name":"Stream or River","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=detailed_hydro_view&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=Stream%20or%20River"]},{"name":"Pond","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=detailed_hydro_view&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=Pond"]},{"name":"Lake Erie","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=detailed_hydro_view&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=Lake"]},{"name":"Other Wet Areas","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=detailed_hydro_view&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=Other%20Wet%20Areas"]}]},{"name":"Trails","classes":[{"name":"ADA, APT","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=cm_trails&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=rule01"]},{"name":"Bridle","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=cm_trails&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=rule02"]},{"name":"Hiking","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=cm_trails&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=rule03"]},{"name":"Mountain Bike Trails","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=cm_trails&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=rule04"]},{"name":"Connector Trail","icons":["http://maps/geoserver/wms?&VERSION=1.1.0&REQUEST=GetLegendGraphic&LAYER=cm_trails&HEIGHT=10&WIDTH=10&FORMAT=image%2Fpng&TRANSPARENT=true&LEGEND_OPTIONS=forceLabels%3Afalse&EXCEPTIONS=application%2Fvnd.ogc.se_xml&RULE=rule05"]}]}],"layers":[{"baseURL":"http://maps/geoserver/wms?","opacity":1,"singleTile":false,"type":"WMS","layers":["cuy_bridge_decks","planet_osm_line_outside_cuy_map","cuy_roads_poly","cuyahoga_street_centerlines","reservation_bounds_solid"],"format":"image/png","styles":[""],"customParams":{"TILED":"false","TRANSPARENT":true}},{"baseURL":"http://maps/geoserver/wms?","opacity":1,"singleTile":false,"type":"WMS","layers":["reservation_bounds"],"format":"image/png","styles":[""],"customParams":{"TRANSPARENT":true,"TILED":false}},{"baseURL":"http://maps/geoserver/wms?","opacity":1,"singleTile":false,"type":"WMS","layers":["detailed_hydro_view"],"format":"image/png","styles":[""],"customParams":{"TRANSPARENT":true,"TILED":false}},{"baseURL":"http://maps/geoserver/wms?","opacity":1,"singleTile":false,"type":"WMS","layers":["cm_bridge_view"],"format":"image/png","styles":[""],"customParams":{"TRANSPARENT":true,"TILED":false}},{"baseURL":"http://maps/geoserver/wms?","opacity":1,"singleTile":false,"type":"WMS","layers":["cm_trails"],"format":"image/png","styles":[""],"customParams":{"TRANSPARENT":true,"TILED":false}},{"baseURL":"http://maps/geoserver/wms?","opacity":1,"singleTile":false,"type":"WMS","layers":["impervious_update","cm_buildings","cm_buildings_outline"],"format":"image/png","styles":[""],"customParams":{"TILED":"false","TRANSPARENT":true}},{"baseURL":"http://maps/geoserver/wms?","opacity":1,"singleTile":false,"type":"WMS","layers":["golf_view"],"format":"image/png","styles":[""],"customParams":{"TILED":"false","TRANSPARENT":true}},{"baseURL":"http://maps/geoserver/wms?","opacity":1,"singleTile":false,"type":"WMS","layers":["nhd_lake_erie"],"format":"image/png","styles":[""],"customParams":{"TILED":"false","TRANSPARENT":true}},{"baseURL":"http://maps/geoserver/wms?","opacity":1,"singleTile":false,"type":"WMS","layers":["reservation_boundaries_public_private_cm_dissolved_mask_gradien"],"format":"image/png","styles":[""],"customParams":{"TILED":"false","TRANSPARENT":true}},{"baseURL":"http://maps/geoserver/wms?","opacity":1,"singleTile":true,"type":"WMS","layers":["supplementary_shields","odot_interstate","odot_us_routes","odot_state_routes","planet_osm_line","cuyahoga_street_centerlines_labels","planet_osm_line_outside_cuy","detailed_hydro_labels","facilities_cm","facility_areas_cm"],"format":"image/png","styles":[""],"customParams":{"TILED":"false","TRANSPARENT":true}}],"pages":[{"center":[' || ST_X(ST_Centroid(the_geom)) || ',' || ST_Y(ST_Centroid(the_geom)) || '],"scale":2400,"rotation":0,"mapTitle":""}]}'::text FROM loops WHERE (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) < (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) AND (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) < 7900
SELECT 'landscape, linear follow'::text, ST_Centroid(the_geom) FROM loops WHERE (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) > (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) AND (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) > 15800 UNION ALL SELECT 'landscape, quad page'::text, ST_Centroid(the_geom) FROM loops WHERE (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) > (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) AND (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) > 7900 AND (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) <= 15800 UNION ALL SELECT 'landscape, single page'::text, ST_Centroid(the_geom) FROM loops WHERE (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) > (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) AND (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) < 7900 UNION ALL SELECT 'portrait, quad page'::text, ST_Centroid(the_geom) FROM loops WHERE (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) < (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) AND (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) > 7900 AND (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) <= 15800 UNION ALL SELECT 'portrait, single page'::text, ST_Centroid(the_geom) FROM loops WHERE (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) < (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) AND (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) < 7900 UNION ALL SELECT 'portrait, linear follow'::text, ST_Centroid(the_geom) FROM loops WHERE (ST_XMax(ST_Envelope(the_geom)) - ST_XMin(ST_Envelope(the_geom))) < (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) AND (ST_YMax(ST_Envelope(the_geom)) - ST_YMin(ST_Envelope(the_geom))) > 15800 ;
Posted in Database, GeoServer, GIS, MapFish, Other, PostGIS, PostgreSQL, Recreation, SQL, Trail Curation, Trails | Tagged: Database, FOSS, Geoserver, GIS, MapFish, PostGIS, Postgre, PostgreSQL, Technical | 1 Comment »
#OGC Web Services and #Security
Posted by smathermather on March 6, 2012
A while back, I had a (somewhat cryptic) post on OGC services and security. A couple months later, I saw this post on GeoSolution’s site on GeoServer security and the ins and outs of various options, from native to proxied security. It is quite a bit more nuanced than my own… . I recommend you read it, even if you don’t use GeoServer– it is enlightening about the specific problems of securing spatial data that go beyond the simple authentication/authorization models that apply to most other datasets.
Posted in GeoServer, GIS, Other, Security | Tagged: FOSS, Geoserver, GIS, Security | Leave a Comment »
Fast Calculation of Voronoi Polygons in PovRay– Applied
Posted by smathermather on January 30, 2012
In a further exploration of using PovRay to do fast calculation of Voronoi polygons, let’s look to a real stream system as an example. Here’s where the magic comes out, and where medial axes are found.
Here’s the povray code:
#include "transforms.inc"
#version 3.6;
#include "edge_coords1.inc"
#declare Camera_Location = <2258076, 10, 659923>;
#declare Camera_Lookat = <2258076, 0, 659923>;
#declare Camera_Size = 1800;
camera {
orthographic
location Camera_Location
look_at Camera_Lookat
right Camera_Size*x
up Camera_Size*y
}
background {color <0.5, 0.5, 0.5>}
//union {
#declare Rnd_1 = seed (1153);
#declare LastIndex = dimension_size(edge_coords, 1)-2;
#declare Index = 0;
#while(Index <= LastIndex)
cone {
<0.0, -5, 0.0>, 30, <0.0, 5, 0.0>, 0.0
hollow
material {
texture {
pigment {
rgb <rand(Rnd_1)*2 + 1, rand(Rnd_1)*5 + 2, rand(Rnd_1)*5 +5>
}
finish {
diffuse 0.6
brilliance 1.0
}
}
interior {
ior 1.3
}
}
translate edge_coords[Index]
}
#declare Index = Index + 1;
#end
#declare edge_coords = array[16842]
{<2256808.71000000000, 0.00000000000, 660094.46988100000> ,
<2256810.06170000000, 0.00000000000, 660092.99580200000> ,
<2256811.41308000000, 0.00000000000, 660091.52172400000> ,
<2256811.68965000000, 0.00000000000, 660091.21988700000> ,
<2256813.46393000000, 0.00000000000, 660090.29698900000> ,
<2256815.23820000000, 0.00000000000, 660089.37376200000> ,
<2256817.01248000000, 0.00000000000, 660088.45086400000> ,
<2256818.78675000000, 0.00000000000, 660087.52763700000> ,
<2256820.56103000000, 0.00000000000, 660086.60473900000> ,
<2256822.33530000000, 0.00000000000, 660085.68151200000> ,
<2256824.10958000000, 0.00000000000, 660084.75861400000> ,
<2256825.88352000000, 0.00000000000, 660083.83538800000> ,
<2256827.65780000000, 0.00000000000, 660082.91248900000> ,
<2256829.43207000000, 0.00000000000, 660081.98926300000> ,
<2256831.20635000000, 0.00000000000, 660081.06636400000> ,
Posted in Analysis, GIS, Optics, Other, POV-Ray | Tagged: Analysis, FOSS, GIS, POV-Ray, povray | Leave a Comment »
Fast Calculation of Voronoi Polygons in PovRay
Posted by smathermather on January 20, 2012
Yet further abuse to follow in the application of PovRay for spatial analyses– be forwarned… .
Calculating Voronoi polygons is a useful tool for calculating the initial approximation of a medial axis. We densify the vertices on the polygon for which we want a medial axis, and then calculate Voronoi polygons on said vertices. I’ll confess– I’ve been using ArcGIS for this step. There. I said it. My name is smathermather, and I use ArcGIS. It’s a darn useful tool, and, and, I’m not ashamed to say that I use it all the time.
But, I do like the idea of doing this with non-proprietary, open source tools. I’ve contemplated using the approach that Regina Obe blogs about using PL/R + PostGIS to calculate them, but the installation of PL/R on my system failed my initial Yak Shaving Test.
So, with some google-fu, I stumbled upon articles on using 3D approaches to calculate 2D Voronoi diagrams, and my brain went into high gear. Right cones of equal size, viewed orthogonally generate lovely Voronoi diagrams, the only caveat being you need to know what your maximum distance you want to calculate in your diagram. For my use cases, this isn’t a limitation at all.
And so we abuse PovRay, yet again, to do our dirty work in analyses. I’ll undoubtedly have some follow up posts on this, but in the mean time, some diagrams and really dirty code:

global_settings {
ambient_light rgb <0.723364, 0.723368, 0.723364>
}
camera {
orthographic
location < 0.0, 5, 0>
right x * 3
up y * 3
look_at < 0.0, 0.0, 0.0>
}
light_source {
< 0.0, 100, 0>
rgb <0.999996, 1.000000, 0.999996>
parallel
point_at < 0.0, 0.0, 0.0>
}
light_source {
< 0.0, 100, 100>
rgb <0.999996, 1.000000, 0.999996>
parallel
point_at < 0.0, 0.0, 0.0>
}
light_source {
< 100, 100, 0>
rgb <0.999996, 1.000000, 0.999996>
parallel
point_at < 0.0, 0.0, 0.0>
}
cone {
<0.0, -0.5, 0.0>, 0.5, <0.0, 0.5, 0.0>, 0.0
hollow
material {
texture {
pigment {
rgb <0.089677, 0.000000, 1.000000>
}
finish {
diffuse 0.6
brilliance 1.0
}
}
interior {
ior 1.3
}
}
}
cone {
<0.0, -0.5, 0.0>, 0.5, <0.0, 0.5, 0.0>, 0.0
hollow
material {
texture {
pigment {
rgb <1, 0.000000, 1.000000>
}
finish {
diffuse 0.6
brilliance 1.0
}
}
interior {
ior 1.3
}
}
translate <-0.5,0,-0.5>
}
cone {
<0.0, -0.5, 0.0>, 0.5, <0.0, 0.5, 0.0>, 0.0
hollow
material {
texture {
pigment {
rgb <1, 0.000000, 000000>
}
finish {
diffuse 0.6
brilliance 1.0
}
}
interior {
ior 1.3
}
}
translate <-0.5,0,0.5>
}
cone {
<0.0, -0.5, 0.0>, 0.5, <0.0, 0.5, 0.0>, 0.0
hollow
material {
texture {
pigment {
rgb <1, 1.000000, 000000>
}
finish {
diffuse 0.6
brilliance 1.0
}
}
interior {
ior 1.3
}
}
translate <0.3,0,0.3>
}
cone {
<0.0, -0.5, 0.0>, 0.5, <0.0, 0.5, 0.0>, 0.0
hollow
material {
texture {
pigment {
rgb <0, 1.000000, 000000>
}
finish {
diffuse 0.6
brilliance 1.0
}
}
interior {
ior 1.3
}
}
translate <0.4,0,-0.2>
}
cone {
<0.0, -0.5, 0.0>, 0.5, <0.0, 0.5, 0.0>, 0.0
hollow
material {
texture {
pigment {
rgb <1, 1.000000, 1.000000>
}
finish {
diffuse 0.6
brilliance 1.0
}
}
interior {
ior 1.3
}
}
translate <0,0,-.7>
}
Posted in Analysis, GIS, Optics, Other, POV-Ray | Tagged: Analysis, FOSS, GIS, POV-Ray, povray | 2 Comments »
There’s an App for That, Alternate
Posted by smathermather on January 2, 2012
codinggeekette, or Sarah Dutkiewicz and her husband introduced me to Linux and Open Source many years ago. Running counter-culture is the genius that is @sadukie, so now she’s a Microsoft MVP. We’ll forgive her that, since she does crazy stuff like setting up .net environments on Linux and other fun stuff. Anyway, Sarah has a post on phone apps she likes and has proposed in her post (quasi) simu-blogging on the topic. I’ll bite. I’ll focus mine on the limited mapping apps I have on my iPod, since my smartphone solution is an iPod touch and a Motorola flip phone.
App number one: Tiltmeter.
Tiltmeter is simply that– it logs at a specified interval the 2D axis tilt of your iPod or iPhone, and can show that visually or e-mail the log to you. Oh, where were you Tiltmeter, when I was building camera arrays, putting bandpass filters on them, and launching them on a 12-foot balloon.
It was a low cost, few band, hyperspectral attempt at calculating red-edge effects for productivity estimations. A very early attempt at something similar to Grassroots Mapping. Let’s just say, a tiltmeter would have really made the georeferencing easier… .
App number B: Ride the City.
Ride the city is a very nice point-to-point routing solution for a desktop or mobile client. It’s a discreet app on the mobile side. Other than not doing looped (recreational) mapping support, it’s a pretty cool application. Great for commuter bicycling.
App Gamma: PDF Maps
PDF Maps is a tool from Avenza Systems for viewing Geo PDFs. I’ll confess, since I have an iPod touch, and therefore no GPS, I haven’t run this one through the ringer (and there are other likely choices), but it could be a really useful tool in concert, e.g., with the Geo PDFs from the USGS.
Posted in GIS, Other | Tagged: GIS, Mobile | 1 Comment »
2011 in review — Laziest post possible
Posted by smathermather on December 31, 2011
Happy New Year everyone! In a beautifully global fashion, the first New Year wishes I received this year were out of Africa from two folks I follow on twitter. In that same vein, my blog is comfortably global, with readers on all the continents, Antarctica notwithstanding. As I used to do polar research, I suppose I should change that 6 out of 7 to 7 out of 7, but it could be that it might be hard to get decent numbers down there. WordPress may also not tabulate them. Regardless, hello to summer residents of Antarctica, all 5-thousand or so of you. I love polar stereographic. UTM wouldn’t be the same without its partner UPS.
Anyway, I am humbled by my readership, people who keep me in line with smart comments, and guide my growth in the geospatial world. Report excerpt and link as follows:
“The WordPress.com stats helper monkeys prepared a 2011 annual report for this blog.
Here’s an excerpt:
The concert hall at the Syndey Opera House holds 2,700 people. This blog was viewed about 14,000 times in 2011. If it were a concert at Sydney Opera House, it would take about 5 sold-out performances for that many people to see it.
Posted in Other | 2 Comments »










