SlideShare una empresa de Scribd logo
1 de 179
Descargar para leer sin conexión
Where 2.0
   Mapping Hacks Tutorial 1
   Andrew Turner                       FortiusOne              ajturner@gmail.com

   Rabble                              ENTP                   evan@protest.net




Welcome to Mapping the Mapping Hacks with Google, Yahoo, Open Street Map, and fellow
travelers.

I’m Rabble, i like to cause trouble, and think maps are fun. I don’t do this for a living.

I’m Andrew, i like to build maps and i do do this for a living.
Mapping Hacks Tutorial
   What’s Covered?
   Building Maps                      Part I

   Building Data                      Part II




This tutorial is divided up in to two parts. First half is the building and display of maps. Then
we’ll have a break, and the second half will be about the data of maps.
Feel free
to ask questions
     at any time.




    http://flickr.com/photos/seandreilinger/2326448445
Building Maps

How to build maps, and put them on the web. The scope of this tutorial is limited to web
mapping.
Building Data

The second half of the workshop is how to get and manipulate mapping data. There’s a huge
amount of geodata out there, the trick is getting it in to useful formats.
Building Data == Later == Part II

But that’s for the second half, after the break. Before we can get there, we need to be able to
see it.
Building Maps On Other
                    People’s API’s
It’s possible to use pure open source data and software to do mapping. For the more
advanced examples we will use these tools. But the vast majority of mapping hacks today are
built upon google maps, so we will start by walking through how to build on top of and
extend google maps.
Terminology

   •Vector                        •XML


   •Raster                        •REST


   •Feature                       •Proprietary - Open


   •Attributes




First, some terminology to help
Terminology

   •Vector                        •XML


   •Raster                        •REST


   •Feature                       •Proprietary - Open


   •Attributes




First, some terminology to help
Terminology

   •Vector                        •XML


   •Raster                        •REST


   •Feature                       •Proprietary - Open


   •Attributes




First, some terminology to help
Terminology

   •Vector                        •XML


   •Raster                        •REST


   •Feature                       •Proprietary - Open


   •Attributes




First, some terminology to help
Terminology

   •Vector                        •XML


   •Raster                        •REST


   •Feature                       •Proprietary - Open


   •Attributes




First, some terminology to help
Terminology
                                          <element attribute=quot;valuequot;>
   •Vector                        •XML      content
                                          </element>


   •Raster                        •REST


   •Feature                       •Proprietary - Open


   •Attributes




First, some terminology to help
Terminology
                                          <element attribute=quot;valuequot;>
   •Vector                        •XML      content
                                          </element>


   •Raster                        •REST   http://host/resource.format



   •Feature                       •Proprietary - Open


   •Attributes




First, some terminology to help
Terminology: Geometries

   • Point


   • LineString


   • Box


   • Polygon


   • MultiGeometry


   • Coordinate Reference System (aka Projection)




Even with “location” there are several important types of geometries that are common.
Almost all the formats we’ll talk about support all these geometry types. So we’ll show some
examples, but assume you’ll need to know what’s appropriate, but that it’s probably
supported.
Terminology: Geometries

   • Point


   • LineString


   • Box


   • Polygon


   • MultiGeometry


   • Coordinate Reference System (aka Projection)




Even with “location” there are several important types of geometries that are common.
Almost all the formats we’ll talk about support all these geometry types. So we’ll show some
examples, but assume you’ll need to know what’s appropriate, but that it’s probably
supported.
Terminology: Geometries

   • Point


   • LineString


   • Box


   • Polygon


   • MultiGeometry


   • Coordinate Reference System (aka Projection)




Even with “location” there are several important types of geometries that are common.
Almost all the formats we’ll talk about support all these geometry types. So we’ll show some
examples, but assume you’ll need to know what’s appropriate, but that it’s probably
supported.
Terminology: Geometries

   • Point


   • LineString


   • Box


   • Polygon


   • MultiGeometry


   • Coordinate Reference System (aka Projection)




Even with “location” there are several important types of geometries that are common.
Almost all the formats we’ll talk about support all these geometry types. So we’ll show some
examples, but assume you’ll need to know what’s appropriate, but that it’s probably
supported.
Terminology: Geometries

   • Point


   • LineString


   • Box


   • Polygon


   • MultiGeometry


   • Coordinate Reference System (aka Projection)




Even with “location” there are several important types of geometries that are common.
Almost all the formats we’ll talk about support all these geometry types. So we’ll show some
examples, but assume you’ll need to know what’s appropriate, but that it’s probably
supported.
Terminology: Geometries

   • Point


   • LineString


   • Box


   • Polygon


   • MultiGeometry


   • Coordinate Reference System (aka Projection)




Even with “location” there are several important types of geometries that are common.
Almost all the formats we’ll talk about support all these geometry types. So we’ll show some
examples, but assume you’ll need to know what’s appropriate, but that it’s probably
supported.
Terminology: Geometries

   • Point


   • LineString


   • Box


   • Polygon


   • MultiGeometry


   • Coordinate Reference System (aka Projection)




Even with “location” there are several important types of geometries that are common.
Almost all the formats we’ll talk about support all these geometry types. So we’ll show some
examples, but assume you’ll need to know what’s appropriate, but that it’s probably
supported.
Longitude is the X
Latitude




                        Longitude   [x,y]
Longitude is the X
Latitude




                        Longitude   [x,y]
Google Maps

Web mapping has been around for a long time, but it was really the advent of google maps
which got the masses hacking on web maps.
Mapstraction

Beyond our first demos we’ll get in to how to use the mapstraction library. It lets you easily
move between mapping apis, it’s open source, and works with many data sources.
Mapstraction
OpenLayers

Then we’re going to end with some examples built in OpenLayers which give you the most
flexibility in your map hacking.
Start Simple
Mapstraction Recipe
1.Include Javascripts


2.Create an HTML Map Div


3.Create a JavaScript Mapstraction object


4.Center the Map


5.Add Controls


6.Add Features - Markers, Polylines, Overlays, etc.


7.Events
Play Along

http://mapstraction.appspot.com
OpenLayers   http://openlayers.org
map = new OpenLayers.Map(quot;mapquot;, {
    maxResolution: 360/512,
        projection: quot;EPSG:4326quot; ,
        numZoomLevels: 20,
        minZoomLevel: 0,
        maxZoomLevel: 19,
    controls: [
        new OpenLayers.Control.Navigation(),
        new OpenLayers.Control.PanPanel(),
        new OpenLayers.Control.ZoomPanel()
    ]
});
var wms = new OpenLayers.Layer.WMS(
    quot;worldquot;,
    quot;/cgi-bin/tilecache/tilecache.cgi?quot;,
    {layers: 'world'}
);
map.addLayers([wms]);
map.setCenter(new OpenLayers.LonLat(0, 32), 7);
map = new OpenLayers.Map(quot;mapquot;, {
    maxResolution: 360/512,
        projection: quot;EPSG:4326quot; ,
        numZoomLevels: 20,
        minZoomLevel: 0,
        maxZoomLevel: 19,
    controls: [
        new OpenLayers.Control.Navigation(),
        new OpenLayers.Control.PanPanel(),
        new OpenLayers.Control.ZoomPanel()
    ]
});
var wms = new OpenLayers.Layer.WMS(
    quot;worldquot;,
    quot;/cgi-bin/tilecache/tilecache.cgi?quot;,
    {layers: 'world'}
);
map.addLayers([wms]);
map.setCenter(new OpenLayers.LonLat(0, 32), 7);
<link rel=quot;stylesheetquot; href=quot;../themes/gray.cssquot; type=quot;text/cssquot; media=quot;screenquot; />
<div id=quot;mapquot; class=quot;gray smallmapquot;></div>
<link rel=quot;stylesheetquot; href=quot;../themes/gray.cssquot; type=quot;text/cssquot; media=quot;screenquot; />
<div id=quot;mapquot; class=quot;gray smallmapquot;></div>

         div.gray .olControlZoomPanel {
             top: 14px;
             left: 14px;
         }

         div.gray .olControlZoomPanel div {
             background-image: url(img/gray/gray_zoom_horiz.png);
             height: 18px;
             width: 18px;
         }

         div.gray .olControlZoomPanel .olControlZoomInItemInactive {
             top: 0px;
             left: 25px;
             background-position: 18px 0px;
         }

         div.gray .olControlZoomPanel .olControlZoomToMaxExtentItemInactive {
             top: 0px;
             left: 0px;
             background-position: 0px -18px;
         }

         div.gray .olControlZoomPanel .olControlZoomOutItemInactive {
             top: 0px;
             left: 0px;
             background-position: 0px 0px;
         }
<link rel=quot;stylesheetquot; href=quot;../themes/gray.cssquot; type=quot;text/cssquot; media=quot;screenquot; />
<div id=quot;mapquot; class=quot;gray smallmapquot;></div>

         div.gray .olControlZoomPanel {
             top: 14px;
             left: 14px;
         }

         div.gray .olControlZoomPanel div {
             background-image: url(img/gray/gray_zoom_horiz.png);
             height: 18px;
             width: 18px;
         }

         div.gray .olControlZoomPanel .olControlZoomInItemInactive {
             top: 0px;
             left: 25px;
             background-position: 18px 0px;
         }

         div.gray .olControlZoomPanel .olControlZoomToMaxExtentItemInactive {
             top: 0px;
             left: 0px;
             background-position: 0px -18px;
         }

         div.gray .olControlZoomPanel .olControlZoomOutItemInactive {
             top: 0px;
             left: 0px;
             background-position: 0px 0px;
         }
<link rel=quot;stylesheetquot; href=quot;../themes/hearts.cssquot; type=quot;text/cssquot; media=quot;screenquot; />
<div id=quot;mapquot; class=quot;hearts smallmapquot;></div>
<link rel=quot;stylesheetquot; href=quot;../themes/hearts.cssquot; type=quot;text/cssquot; media=quot;screenquot; />
<div id=quot;mapquot; class=quot;hearts smallmapquot;></div>




                 .hearts .olControlZoomPanel div {
                     background-image: url(img/hearts/hearts-zoom.png);
                 }
                 .hearts .olControlPanPanel div {
                     background-image: url(img/hearts/hearts-panel.png);
                 }
<link rel=quot;stylesheetquot; href=quot;../themes/hearts.cssquot; type=quot;text/cssquot; media=quot;screenquot; />
<div id=quot;mapquot; class=quot;hearts smallmapquot;></div>




                 .hearts .olControlZoomPanel div {
                     background-image: url(img/hearts/hearts-zoom.png);
                 }
                 .hearts .olControlPanPanel div {
                     background-image: url(img/hearts/hearts-panel.png);
                 }
Accessibility
ModestMaps
package {
    public class ModestMapsSample extends Sprite
    {
        private var map:Map;
        public function ModestMapsSample()
        {
            map = new TweenMap(stage.stageWidth - 2 * PADDING, stage.stageHeight - 2 * PADDING,
                                true,
                                new MicrosoftRoadMapProvider(),
                                new MapExtent(37.829853, 37.700121, -122.212601, -122.514725));
            map.addChild(new MapControls(map));
            map.addChild(new ZoomSlider(map));
            addChild(map);
        }
    }
}
London2012   http://london2012.co.uk
Hurricane Tracking   http://hurricanewiki.org
Bakery Routing   http://carto.iict.ch/www/broetlikrones/htdocs/index.php
MySociety House Price     http://www.mysociety.org/2007/more-travel-maps/

        vs. Travel Time
Hacking with Google, Virtual Earth and Yahoo's
Maps API II
Data
Why does open, interoperable data matter?




We just went over how you can create markers with javascript, from a database. Why would
you bother spending time and resources working with formats that man mean other people
can use your data?
http://www.flickr.com/photos/blah_oh_well/352203022
              It’s not enough for a
            Web App to be Sticky...
Common design principles want to make a website “sticky”. To encourage users to stay at the
site and return often.

But this is no longer sufficient - users want more.
http://www.flickr.com/photos/orinrobertjohn/139788703
                 ...it also needs to be
                                stringy.
Web applications need to be “Stringy” - they need to provide ways for users to move their
data into, and out of the system. It needs to connect into the rest of their personal and
corporate suite of tools, workflows, and expectations.
http://www.flickr.com/photos/josefstuefer/9500503
                       almost like a web

Sites need to be sticky, and stringy. Kind of like a web.

or better known as The Web - we’ll get back to that later
Why does it really matter?




Traction is good - but won’t I be the only one doing this? How will it get you business?
photo credits
                                              .gov

let’s look at an actual use case for why this is important
.gov




       photo credits
photo credits
                             Recovery.gov

Recovery.gov is a very new, and quickly conceived and implemented initiative to track all the
stimulus dollars: from tax payer, to gov’t, to agency, to project, to tax payer.
photo credits
               A Chance for Change                       http://isd.ischool.berkeley.edu/stimulus/2009-029/




Given the new administration support for new initiatives and Transparency, it’s a chance for
agencies, and citizens, to engage in rethinking how it’s all done.

They’re talking about GeoRSS AtomPub, KML, Linked Open Data, RDFa. All the hot topics on
data sharing - the point of this workshop.
photo credits
                   TimeMap Mockup

The UC Berkeley iSchool has published papers, example websites, and example feeds about
how it *could* be done.
photo credits
                                    Data.gov

And it’s just the beginning. Data.gov will incorporate these ideas across the federal, and
subsequently local, governments. This will be they ways in which information is spread in the
US Government.
International Open Data

And it’s not just the US government, it also applies internationally to directives such as
INSPIRE which is working in the EU to open data.
THEREFORE BE IT RESOLVED THAT the City of
      Vancouver endorses the principles of:
      • Open and Accessible Data - the City of
        Vancouver will freely share with citizens,
        businesses and other jurisdictions the greatest
        amount of data possible while respecting
        privacy and security concerns;
      • Open Standards - the City of Vancouver will
        move as quickly as possible to adopt
        prevailing open standards for data,
        documents, maps, and other formats of
        media;


                                                       motion, May 15, 2009
Governments are enforcing data standards.

This is a big win from getting data for your system, as well as providing them technology that
works within their ecosystem.
http://www.flickr.com/photos/bitterlysweet/33358201
                     Why is it so hard?

So if everyone is clamoring over open, sharable data - why has it been so hard?
photo credits
                                  lots of this           Sheets of CSV files


Currently data is shared either by large spreadsheets of unstructured (or at best semi-
structured) tabular data
photo credits
                                                                                http://www.flickr.com/photos/johncharlton/360919818
             Each Format is Unique

Even when there is structure, people use arbitrary markups, formats, schemas.
photo credits
                                                                                             http://www.flickr.com/photos/bookgrl/3111647593
                          ...and unlinked

And there has been no way to know if one location was the same as another - or a person or
project had a link to more about them.
...and proprietary




                     http://www.flickr.com/photos/documentarist/473084939/
http://www.flickr.com/photos/fragilelisa/3212684410
                  But that’s changing

There is a brighter future - it’s happening grass-roots, top-down, and sideways.
http://www.flickr.com/photos/huladancer22/530743543/
                                    Formats

There are a number of different formats - each of which is appropriate depending on what
you’re trying to do.
http://www.flickr.com/photos/tomhe/311381947
   What do you want to do?




The first, overarching thing you can do when choosing the formats to support is consider
what you are trying to accomplish.

Interchange
Visualization
Analysis
Interchange
GeoRSS




GeoRSS simply adds Geo to RSS/Atom
GeoRSS




GeoRSS simply adds Geo to RSS/Atom
GeoRSS




                  +




GeoRSS simply adds Geo to RSS/Atom
GeoRSS




                       <georss:point>
                  +       45.256 -71.92
                       </georss:point>




GeoRSS simply adds Geo to RSS/Atom
GeoRSS




                       <georss:point>
                  +       45.256 -71.92
                       </georss:point>




GeoRSS simply adds Geo to RSS/Atom
GeoRSS




                       <georss:point>
                  +       45.256 -71.92
                       </georss:point>




GeoRSS simply adds Geo to RSS/Atom
RSS / Atom

        <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?>
        <feed xmlns=quot;http://www.w3.org/2005/Atomquot; xmlns:georss=quot;http://www.georss.org/
        georssquot; xmlns:local=quot;http://oakland.crimespotting.org/nsquot;>
          <title>Oakland Crime Feed</title>
          <link href=quot;http://oakland.crimespotting.org/~migurski/oaklandcrime/wwwquot;/>
          <updated local:date=quot;Wednesday, Apr 29, 2009quot;
        local:time=quot;6:30pmquot;>2009-04-29T18:30:00-07:00</updated>
          <entry>
            <title>THEFT</title>
            <link rel=quot;alternatequot; href=quot;http://oakland.crimespotting.org/~migurski/
        oaklandcrime/www/crime/2009-04-29/Theft/127204quot;/>
            <id>crime:oakland/09-029660/THEFT</id>
            <updated local:date=quot;Wednesday, Apr 29, 2009quot;
        local:time=quot;6:30pmquot;>2009-04-29T18:30:00-07:00</updated>
            <category term=quot;THEFTquot; label=quot;Theftquot;/>
            <content type=quot;htmlquot;><![CDATA[<h3>Theft</h3><h4>Wednesday, Apr 29, 2009
        6:30pm</h4>...]]></content>
          </entry>
        </feed>




                                       http://oakland.crimespotting.org
go from this:
GeoRSS: Example

        <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?>
        <feed xmlns=quot;http://www.w3.org/2005/Atomquot; xmlns:georss=quot;http://www.georss.org/
        georssquot; xmlns:local=quot;http://oakland.crimespotting.org/nsquot;>
          <title>Oakland Crime Feed</title>
          <link href=quot;http://oakland.crimespotting.org/~migurski/oaklandcrime/wwwquot;/>
          <updated local:date=quot;Wednesday, Apr 29, 2009quot;
        local:time=quot;6:30pmquot;>2009-04-29T18:30:00-07:00</updated>
          <entry>
            <title>THEFT</title>
            <link rel=quot;alternatequot; href=quot;http://oakland.crimespotting.org/~migurski/
        oaklandcrime/www/crime/2009-04-29/Theft/127204quot;/>
            <id>crime:oakland/09-029660/THEFT</id>
            <updated local:date=quot;Wednesday, Apr 29, 2009quot;
        local:time=quot;6:30pmquot;>2009-04-29T18:30:00-07:00</updated>
            <category term=quot;THEFTquot; label=quot;Theftquot;/>
            <georss:point>37.807417 -122.275233</georss:point>
            <content type=quot;htmlquot;><![CDATA[<h3>Theft</h3><h4>Wednesday, Apr 29, 2009
        6:30pm</h4>...]]></content>
          </entry>
        </feed>




                                       http://oakland.crimespotting.org
to this - with geo added
GeoRSS Spotlight:
                                                        Reuters News
                      Reuters News
Reuters news is one example of a site that you can get GeoRSS to view the news where it’s
happening.
GeoRSS Spotlight:
                                                        Reuters News
                      Reuters News
Reuters news is one example of a site that you can get GeoRSS to view the news where it’s
happening.
photo credits
   GeoRSS Spotlight:
                        http://oakland.crimespotting.org/
Oakland Crimespotting
GeoRSS Spotlight:   http://earthquake.usgs.gov/eqcenter/catalogs/
         USGS
GeoRSS Spotlight:
     FriendFeed
GeoRSS Future

• Supports point, line, box, polygon


• Not an ‘official’ standard. OGC best practice


• Used by most mapping tools


• Next generation:


   • External, by reference, geometries (e.g. link to “US”)


   • Multiple geometries per entry




                                                         http://georss.org
GeoRSS Demo!
GeoJSON




very compact - only requires an eval() to turn into JavaScript objects.
GeoJSON




               { quot;keyquot;: quot;valuequot;,
                 quot;dictionaryquot; : {
                     quot;index1quot;:quot;another valuequot;,
                     quot;index2quot;:quot;more valuesquot;
                 }}


very compact - only requires an eval() to turn into JavaScript objects.
GeoJSON: Point




            { quot;typequot;: quot;Pointquot;,
               quot;coordinatesquot;: [100.0, 0.0] }




Supports all the standard geometry types.
GeoJSON: LineString




    { quot;typequot;: quot;LineStringquot;,
        quot;coordinatesquot;: [
            [100.0, 0.0], [101.0, 1.0]
        ]
     }
GeoJSON: Polygon




 { quot;typequot;: quot;Polygonquot;,
    quot;coordinatesquot;: [[
      [100.0, 0.0], [101.0, 0.0],
      [101.0, 1.0], [100.0, 1.0],
      [100.0, 0.0]
     ]] }
GeoJSON: MultiGeometry




     {
         quot;typequot;: quot;MultiPointquot;,
         quot;coordinatesquot;: [
             [100.0, 0.0], [101.0, 1.0]
         ]
     }
GeoJSON: MultiGeometry

          { quot;typequot;: quot;GeometryCollectionquot;,
              quot;geometriesquot;: [
                  {
                      quot;typequot;: quot;Pointquot;,
                      quot;coordinatesquot;: [100.0, 0.0]
                  },
                  {
                      quot;typequot;: quot;LineStringquot;,
                      quot;coordinatesquot;: [
                          [101.0, 0.0], [102.0, 1.0]
                      ]
                  }
              ]
           }




Supports multiple geometries
GeoJSON: CRS

              quot;crsquot;: {
                  quot;typequot;: quot;namequot;,
                  quot;propertiesquot;: {
                       quot;namequot;: quot;urn:ogc:def:crs:OGC:1.3:CRS84quot;
                  }
              }


              quot;crsquot;: {
                  quot;typequot;: quot;linkquot;,
                  quot;propertiesquot;: {
                       quot;hrefquot;: quot;http://example.com/crs/42quot;,
                       quot;typequot;: quot;proj4quot;
                  }
              }




Projections
GeoJSON: Atom

      { quot;blogquot;: {
          quot;postsquot;: [
          { quot;typequot;: quot;atom:itemquot;,
          quot;atom:summaryquot;: quot;post 1quot;,
          quot;atom:descriptionquot;: quot;i love bloggingquot;
          },
          { quot;typequot;: quot;atom:itemquot;,
          quot;atom:summaryquot;: quot;post 2 from CAquot;,
          quot;atom:descriptionquot;: quot;geoblogging in Californiaquot;
          quot;geometryquot;: {
              quot;typequot;, quot;Pointquot;,
              quot;coordinatesquot;: [-120, 40]
          }
          },
          ],
          quot;geometryquot;: {
              quot;typequot;: quot;Polygonquot;,
              quot;coordinatesquot;: [[[-121, 39], [-119, 39], [-119, 41], [-121, 41], [-121, 39]]]
          }
      }
      }




An example of Atom encoded in GeoJSON
GeoJSON Demo!
GPX

   • Common Format for GPS (XML)


   • Stores


      • Waypoints (wpt)


      • Tracks (trk)


      • Routes (rte)


   • Useful for importing from GPS (for geotagging photos) or exporting to (tracks,
     waypoints, points of interest)




GPS Exchange format
Used for exporting/importing to GPS Devices
GPX: Track
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
<gpx xmlns:xsi=quot;http://www.w3.org/2001/XMLSchema-instancequot; xmlns=quot;http://www.topografix.com/GPX/1/0quot;
version=quot;1.0quot; creator=quot;GPSBabel - http://www.gpsbabel.orgquot; xsi:schemaLocation=quot;http://
www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsdquot;>
    <time>2007-12-26T00:42:06Z</time>
    <bounds minlat=quot;39.9168108quot; minlon=quot;116.4112773quot; maxlat=quot;40.48346838quot; maxlon=quot;116.65506564quot;/>
    <trk>
        <name>ACTIVE LOG #2</name>
        <number>1</number>
        <trkseg>
            <trkpt lat=quot;39.923049649quot; lon=quot;116.413739165quot;>
                 <ele>55.413086</ele>
                 <time>2007-12-25T00:00:22Z</time>
            </trkpt>
            <trkpt lat=quot;39.923191974quot; lon=quot;116.414713562quot;>
                 <ele>69.352295</ele>
                 <time>2007-12-25T00:00:31Z</time>
            </trkpt>
            <trkpt lat=quot;39.923132882quot; lon=quot;116.416241163quot;>
                 <ele>66.948975</ele>
                 <time>2007-12-25T00:00:41Z</time>
            </trkpt>
            <trkpt lat=quot;39.923161631quot; lon=quot;116.417345395quot;>
                 <ele>71.274902</ele>
                 <time>2007-12-25T00:00:49Z</time>
            </trkpt>
            <trkpt lat=quot;39.923143359quot; lon=quot;116.417817045quot;>
                 <ele>72.236206</ele>
Waypoints, Tracks, Routes
                 <time>2007-12-25T00:00:55Z</time>
            </trkpt>
photo credits
GPX Example: GPSies   http://gpsies.com
GPX Example: GPSies   http://gpsies.com
CSV - Comma Separated Value

         quot;namequot;,quot;holeparquot;,quot;holeyardagequot;,quot;holenumberquot;,quot;latitudequot;,quot;longitudequot;
         quot;Simple placemarkquot;,quot;4.0quot;,quot;234.0quot;,quot;1.0quot;,quot;-121.082203542568quot;,quot;37.4222899014025quot;
         quot;Simple placemark 2quot;,quot;3.0quot;,quot;100.0quot;,quot;2.0quot;,quot;-121.082203542568quot;,quot;37.4222899014025quot;


         quot;namequot;,quot;holeparquot;,quot;holeyardagequot;,quot;holenumberquot;,quot;addressquot;
         quot;Simple placemarkquot;,quot;4.0quot;,quot;234.0quot;,quot;1.0quot;,quot;1517 N. Main St., Royal Oak, MIquot;
         quot;Simple placemark 2quot;,quot;3.0quot;,quot;100.0quot;,quot;2.0quot;,quot;2200 Wilson Blvd., Arlington, VAquot;




can embed Lat,lon as columns - or WKB (well known binary) string
CSV Demo!
Visualization
KML
   http://code.google.com/apis/kml/
   documentation/kmlreference.html




                                        photourl

KML emerged as a commonly used format for sharing data. It meets the 80% case for
geographic information, human-readable information, metadata, attributes, temporal, 3D,
navigation and more. Surprisingly capable for a simple format.
KML

<?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
<kml xmlns=quot;http://earth.google.com/kml/2.2quot;>
  <Placemark>
    <name>Simple placemark</name>
    <description>Attached to the ground. Intelligently places itself
        at the height of the underlying terrain.</description>
    <Point>
       <coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
    </Point>
  </Placemark>
</kml>
photo credits
KML Line Strings
photo credits
Embedded Media
photo credits
KML Image Overlay
KML 3D

KML can be styled with icons, colors, labels, and even 3D.
KML: Extended Data




                    <ExtendedData id=quot;roomsquot;>
                        <name>Rooms</name>
                        <value>3</value>
                    </ExtendedData>




A way to embed attribute data with any placemark
KML: Styles

   <Style id='class_0'>
   ...
   </Style>


   <Placemark>
   <styleUrl>#class_1</styleUrl>
KML: Styles
<Style id='class_0'>
<PolyStyle>

                                                                                Polygon
    <color>bfa5f7fe</color>
    <fill>1</fill>
    <outline>1</outline>
</PolyStyle>
<LineStyle>
    <color>ffa5f7fe</color>
    <width>2</width>                                                                   Line
</LineStyle>
<IconStyle>
    <color>bfa5f7fe</color>
    <scale>1</scale>
    <Icon>
                                                                                       Icon
         <href>http://maker.geocommons.com/images/icons/propCircle.png</href>
    </Icon>
    <hotSpot x=quot;0.5quot; y=quot;0.5quot; xunits=quot;fractionquot; yunits=quot;fractionquot;/>
</IconStyle>
<BalloonStyle>
<text>
                                                                        Info Window
    <![CDATA[<p><b>Number of Installations:</b> $[selected_attribute]</p>
    <p><b>cost per 0:</b> $[cost]<br/><b>Description:</b> $[description]<br/>
    <b>Incentives:</b> $[incentives]<br/><b>Name:</b> $[name]<br/>
    <b>Size of installs (kW):</b> $[size]<br/><b>Zipcode:</b> $[zipcode]<br/></p>
    <p><a href=quot;http://maker.geocommons.com/maps/5015quot;>View the map in Maker<i>!</i></p>]]></text>
</BalloonStyle>
</Style>
KML: Network Links

                                                index.kml




                layer1.kml         layer2.kml          layer3.kml


 <NetworkLink>
     <name><![CDATA[Pubs in London]]></name>
     <Link>
         <href>http://maker.geocommons.com/maps/839/overlays/1</href>
     </Link>
 </NetworkLink>

Link to other KML files within a KML file. Useful for directory listings of KML.
photo credits
KML Spotlight:
 Google Maps
KML Spotlight:
                          Flickr Export
Flickr photos can be exported using the GeoRSS (geoFeed) or KML links at the bottom of
Flickr pages. This is useful for viewing in GoogleEarth.
KML Demo!
KMZ - Zipped KML




All the verbosity, 10% the size.

Cunning in the simplicity of assigning a Zip compression as an actual type. Makes it very easy
to expose via RESTful services and mime-types.

Very useful when bundling multiple KML files and 3D models together.
Other Visualization Formats

   •SLD - Styled Layer Descriptor

   •Mapnik

   •Cascadenik




SLD - an OGC specification. Uses bits of CSS and a lot of XML
Mapnik - the mapnik map rendering library has it’s own styling XML
Cascadenik - a CSS3-like map styling, with preprocesses for exporting to Mapnik styling
example.mml                                            example.mss



<?xml version=quot;1.0quot; encoding=quot;utf-8quot;?>                 * {
<!DOCTYPE Map>                                               line-width: 1;
<Map bgcolor=quot;#b5d0d0quot; srs=quot;...quot;>                            line-color: #999;
   <Stylesheet>                                              polygon-fill: #fff;
        Map { map-bgcolor: #ccc; }                     }
    </Stylesheet>
    <Stylesheet src=quot;example.mssquot;/>                    *[zoom>=6][zoom<12] {
    <Layer name=quot;worldquot; status=quot;onquot; srs=quot;...quot;>             line-color: #f90;
        <StyleName>world</StyleName>                   }
        <Datasource>                                   #world-borders[zoom<10] NAME
            <Parameter name=quot;typequot;>shape</Parameter>   {
            <Parameter name=quot;filequot;>...</Parameter>         text-fill: #333;
        </Datasource>                                  }
    </Layer>
</Map>




                           Cascadenick                     http://code.google.com/p/mapnik-utils/
Analysis
Shapefile




A misnomer - not a single “File”, but multiple files: SHP geometry, DBF database, SHX data-
geometry join, PRJ projection file, XML metadata.

ESRI Proprietary format - though now widely used.

Limited to 10 character attribute titles.
All geometries must be the same ‘type’ (all points, or all polygons, but not both)
Shapefile Demo!
File GeoDatabases




new ESRI proprietary format - a big problem
SQLite / Spatialite




An alternative. Compact, file based databases. Spatialite adds spatial extensions
Spatialite Demo!
OGC Services

               !
OGC Web Feature Service - WFS




an interface definition for querying Vector datastores
OGC Web Mapping Service - WMS




an interface for querying Raster data stores
http://www.flickr.com/photos/mattphotos/228669751/
   What again did you want to do?




Now that we’ve done a very quick overview of the formats - let’s look at how to decide what
formats to use.
File Sizes


                            File Type                           Size

                          CSV (points)                          3.7k
                               KML                             460k
                            Shapefile                           208k




                                              Proposed Stimulus Spending
                                                   http://finder.geocommons.com/overlays/9313

The first is strictly technical - what is the file size of these formats? How doest that affect the
user (mobile, costs, server)
User Compatibility

   • Feed Readers


   • GoogleEarth


   • Mapping API’s


   • Browsers




What tools will the user be using to consume or produce this information?
http://www.flickr.com/photos/samiksha/406928440
                  What does the user
                        understand?
What terms do they understand?

KML has done very well because people know what “GoogleEarth” is and means. They may
have an “RSS Reader”, but they probably don’t have “ArcGIS Desktop” or QGIS. They almost all
have Excel to read CSV.
http://www.flickr.com/photos/umpqua/191909440
                   What does the data
                                                           Form follows Function
                            suggest?
The purpose of the data informs how it should be exposed and utilized.
Is it just for an API? Is it for users to subscribe to? Visualize? Analyze?
GeoWeb

Fortunately, there is the Web. It allows for linking together data
Resources

   •/places

   •/places/89

   •/places/89.atom

   •/places/89.kml

   •/places/89.sqlite

Don’t have to choose a single format - provide many. Appropriate for basic or advanced
users and developers
Web Aligned                 http://highearthorbit.com/a-proposal-georss-kml




Link to the other formats. Tools are getting better at following these links.
http://www.flickr.com/photos/alfr3do/7436142
                  What does the user
                        understand?
What terms do they understand?

KML has done very well because people know what “GoogleEarth” is and means. They may
have an “RSS Reader”, but they probably don’t have “ArcGIS Desktop” or QGIS. They almost all
have Excel to read CSV.
Create
                      Exif    GeoRSS      KML       GPX    Geocoding
 GeoStack


                                        Publish
                  KML          GeoRSS     Microformats    MachineTags



                                      Aggregate
                  KML        GeoRSS      GML        WFS    GeoJSON



                                       Consume

Interchange formats
Finding Data




               http://www.flickr.com/photos/mmmazzoni/110019759
OpenSearch
OpenSearch Template


    http://geocommons.com/search
    ?keyword={searchTerms}
    &limit={count?}
    &page={startPage?}

                                                                   required
                                                                  optional?

OpenSearch is essentially a way to template out search parameters from a URL.
OpenSearch - HTML

     <html xmlns=quot;http://www.w3.org/1999/xhtmlquot; xml:lang=quot;enquot; lang=quot;enquot;>
     <head>
     <title>Starting a Business in San Francisco map</title>
     	     <link type=quot;application/opensearchdescription+xmlquot; title=quot;Mapufacturequot;
     	     	     rel=quot;searchquot; href=quot;http://geocommons.com/search.xmlquot; />
     	     <link type=quot;application/atom+xmlquot;
               title=quot;Mapufacture GeoRSS Feed for Starting a Business in San
               Franciscoquot;
               rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.atomquot; />
     	     <link type=quot;application/vnd.google-earth.kml+xmlquot;
               title=quot;Mapufacture KML for Starting a Business in San Franciscoquot;
               rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.kmlquot; />
     </head>
     <body>
     ...
     </body>
     </html>


If you provide a link in your HTML page to the OpenSearch - browsers like Firefox, Safari, and
Internet Explorer can embed these into browser search bars.

Even MS Windows 7 can connect OpenSearch providers into your *desktop search* to the
web.
OpenSearch - HTML

     <html xmlns=quot;http://www.w3.org/1999/xhtmlquot; xml:lang=quot;enquot; lang=quot;enquot;>
     <head>
     <title>Starting a Business in San Francisco map</title>
     	     <link type=quot;application/opensearchdescription+xmlquot; title=quot;Mapufacturequot;
     	     	     rel=quot;searchquot; href=quot;http://geocommons.com/search.xmlquot; />
     	     <link type=quot;application/atom+xmlquot;
               title=quot;Mapufacture GeoRSS Feed for Starting a Business in San
               Franciscoquot;
               rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.atomquot; />
     	     <link type=quot;application/vnd.google-earth.kml+xmlquot;
               title=quot;Mapufacture KML for Starting a Business in San Franciscoquot;
               rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.kmlquot; />
     </head>
     <body>
     ...
     </body>
     </html>


If you provide a link in your HTML page to the OpenSearch - browsers like Firefox, Safari, and
Internet Explorer can embed these into browser search bars.

Even MS Windows 7 can connect OpenSearch providers into your *desktop search* to the
web.
OpenSearch - HTML

     <html xmlns=quot;http://www.w3.org/1999/xhtmlquot; xml:lang=quot;enquot; lang=quot;enquot;>
     <head>
     <title>Starting a Business in San Francisco map</title>
     	     <link type=quot;application/opensearchdescription+xmlquot; title=quot;Mapufacturequot;
     	     	     rel=quot;searchquot; href=quot;http://geocommons.com/search.xmlquot; />
     	     <link type=quot;application/atom+xmlquot;
               title=quot;Mapufacture GeoRSS Feed for Starting a Business in San
               Franciscoquot;
               rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.atomquot; />
     	     <link type=quot;application/vnd.google-earth.kml+xmlquot;
               title=quot;Mapufacture KML for Starting a Business in San Franciscoquot;
               rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.kmlquot; />
     </head>
     <body>
     ...
     </body>
     </html>


If you provide a link in your HTML page to the OpenSearch - browsers like Firefox, Safari, and
Internet Explorer can embed these into browser search bars.

Even MS Windows 7 can connect OpenSearch providers into your *desktop search* to the
web.
Description Document
      <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
      <OpenSearchDescription xmlns=quot;http://a9.com/-/spec/opensearch/1.1/quot;
      xmlns:geo=quot;http://a9.com/-/opensearch/extensions/geo/1.0/quot;>

       <ShortName>GeoCommons</ShortName>
       <Description>Search for maps and data in GeoCommons</Description>
       <Tags>geo georss location kml aggregation geosearch</Tags>
       <Contact>robot@geocommons.com</Contact>
       <Image width=quot;16quot; height=quot;16quot; type=quot;image/x-iconquot;>http://geocommons.com/
   favicon.ico</Image>

       <Url type=quot;text/htmlquot; template=quot;http://maker.geocommons.com/searches?
   query={searchTerms}&amp;limit={count?}&amp;page={startPage?}quot;/>

       <Url type=quot;application/atom+xmlquot; template=quot;http://maker.geocommons.com/
   searches.atom?query={searchTerms?}&amp;limit={count?}&amp;page={startPage?}quot;/>
   </OpenSearchDescription>




                             http://maker.geocommons.com/search.xml
There is a description document that is hosted on your site.
Formats
  <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
  <OpenSearchDescription xmlns=quot;http://a9.com/-/spec/opensearch/1.1/quot;
      xmlns:geo=quot;http://a9.com/-/opensearch/extensions/geo/1.0/quot;>
      <ShortName>Mapufacture</ShortName>
      <Description>Search for geographic items in Mapufacture</Description>
      <Tags>geo georss location kml aggregation geosearch</Tags>
      <Contact>robot@geocommons.com</Contact>
      <Image width=quot;16quot; height=quot;16quot; type=quot;image/x-iconquot;>http://geocommons.com/favicon.ico</Image>
      <Url type=quot;text/htmlquot; template=quot;http://geocommons.com/search?
  keyword={searchTerms}&dtstart={time:start?}&dtend={time:stop?}&location={geo:locationString?}&la
  t={geo:lat?}&lon={geo:lon?}&distance={geo:radius?}&bbox={geo:box?}&limit={count?}&page={startPag
  e?}quot;/>
      <Url type=quot;application/atom+xmlquot; template=quot;http://geocommons.com/search.atom?
  keyword={searchTerms}&dtstart={time:start?}&dtend={time:stop?}&location={geo:locationString?}&la
  t={geo:lat?}&lon={geo:lon?}&distance={geo:radius?}&bbox={geo:box?}&limit={count?}&page={startPag
  e?}quot;/>
      <Url type=quot;application/vnd.google-earth.kml+xmlquot; template=quot;http://geocommons.com/search.kml?
  keyword={searchTerms}&dtstart={time:start?}&dtend={time:stop?}&location={geo:locationString?}&la
  t={geo:lat?}&lon={geo:lon?}&distance={geo:radius?}&bbox={geo:box?}&limit={count?}&page={startPag
  e?}quot;/>
  </OpenSearchDescription>




                                                                   http://maker.geocommons.com/search.xml

The description document lets you specify multiple return formats.
OpenSearch Response


<feed xmlns:opensearch=quot;http://a9.com/-/spec/opensearch/1.1/quot;
xmlns:georss=quot;http://www.georss.org/georssquot;
xmlns=quot;http://www.w3.org/2005/Atomquot;>
  <title>Mapufacture Maps</title>
  <id>http://geocommons.com/maps</id>
  <opensearch:totalResults>96</opensearch:totalResults>
  <opensearch:startIndex>21</opensearch:startIndex>
  <opensearch:itemsPerPage>20</opensearch:itemsPerPage>
  <link type=quot;application/opensearchdescription+xmlquot;
rel=quot;searchquot; href=quot;http://geocommons.com/geocommonssearch.xmlquot;/>
...
</feed>
Pagination

<link type=quot;application/atom+xmlquot;
rel=quot;firstquot; href=quot;http://geocommons.com/maps?limit=20&page=2quot;/>

<link type=quot;application/atom+xmlquot;
rel=quot;previousquot; href=quot;http://geocommons.com/maps?limit=20&page=1quot;/>

<link type=quot;application/atom+xmlquot;
rel=quot;nextquot; href=quot;http://geocommons.com/maps?limit=20&page=3quot;/>

<link type=quot;application/atom+xmlquot;
rel=quot;lastquot; href=quot;http://geocommons.com/maps?limit=20&page=5quot;/>
Extensions

   • Referrer


   • Relevance


   • Suggestions


   • Geo


   • Time




Multiple extensions - most pertinent here is the Geo extension.
OpenSearch-Geo



 http://geocommons.com/search.atom?
   keyword={searchTerms}&
   location={geo:locationString?}




               http://www.opensearch.org/Specifications/OpenSearch/Extensions/Geo/1.0/Draft_1
OpenSearch-Geo



 http://geocommons.com/search.atom?
   keyword={searchTerms}&
   location={geo:locationString?}


 http://geocommons.com/search.atom?
   keyword=pizza&
   location=Norcross,+Georgia



               http://www.opensearch.org/Specifications/OpenSearch/Extensions/Geo/1.0/Draft_1
OpenSearch-Geo


 http://geocommons.com/search.atom?
   keyword={searchTerms}&
   lat={geo:lat?}&lon={geo:lon?}&distance={geo:radius
   ?}
OpenSearch-Geo


 http://geocommons.com/search.atom?
   keyword={searchTerms}&
   lat={geo:lat?}&lon={geo:lon?}&distance={geo:radius
   ?}
 http://geocommons.com/search.atom?
   keyword=pizza&

 lat=43.25&lon=-123.45&distance=10000
OpenSearch-Geo




 http://geocommons.com/search.atom?
   keyword={searchTerms}&
   bbox={geo:box?}
OpenSearch-Geo




  http://geocommons.com/search.atom?
    keyword={searchTerms}&
    bbox={geo:box?}
 http://geocommons.com/search.atom?
   keyword=pizza&

 bbox=-111.032,42.943,-119.856,43.039
OpenSearch-Geo




 http://geocommons.com/search.atom?
   keyword={searchTerms}&
   region={geo:polygon?}
OpenSearch-Geo




 http://geocommons.com/search.atom?
   keyword={searchTerms}&
   region={geo:polygon?}



 http://geocommons.com/search.atom?
   keyword=pizza&polygon=45.256,-110.45,46.46,-109.48,
                         43.84,-109.86,45.256,-110.45
OpenSearch-Geo


 http://geocommons.com/search.atom?
   keyword={searchTerms}&
   location={geo:locationString?}&
   lat={geo:lat?}&lon={geo:lon?}&distance={geo:radius
   ?}&
   bbox={geo:box?}
Response

 <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
 <feed xmlns=quot;http://www.w3.org/2005/Atomquot;
     xmlns:opensearch=quot;http://a9.com/-/spec/opensearch/1.1/quot;
     xmlns:georss=quot;http://www.georss.org/georssquot;>
     ...
     <opensearch:Query role=quot;requestquot; searchTerms=quot;New York
 Historyquot; startPage=quot;3quot;
 geo:box=quot;-74.0667,40.69418,-73.9116,40.7722quot;/>
     <georss:box>40.69418 -74.0667 40.7722 -73.9116</
 georss:box>
     ...
 </feed>



                          unfortunately, query is (longitude, latitude) [WSEN]
                                    response is (latitude, longitude) [SWNE]
Local Governments   http://data.octo.dc.gov
GeoNetwork + GeoServer




GeoNetwork + GeoServer is a stack to host yourself.
GeoNames




           http://geotree.geonames.org
Storing Data




So where do you go to store all this data?
PostgreSQL + PostGIS




internally? PostGIS - or maybe MySQL if you want to role your own solution
Google MyMaps API




Externally? Google has a beta MyMaps API for pushing markers into Google.
GeoCommons Finder!                        http://geocommons.com


GeoCommons is a public repository for publishing and searching datasets.
ProgrammableWeb




Look at upcoming API’s for other specific places to find geospatial data, and publish it.
GeoWeb

Thank you                     @ajturner
                              @rabble



                 http://highearthorbit.com/presentations/
Atom Publishing Protocol
Atom
<entry>
    <title>Election Precincts</title>
    <link type=quot;text/htmlquot; href=quot;http://finder.geocommons.com/overlays/1quot; rel=quot;alternatequot;/>
    <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot;
rel=quot;alternatequot;/>
    <link type=quot;application/vnd.google-earth.kml+xmlquot; href=quot;http://finder.geocommons.com/overlays/
1.kmlquot; rel=quot;alternatequot;/>
    <link type=quot;application/atom+xml;type=entryquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot;
rel=quot;editquot;/>
    <id>http://finder.geocommons.com/overlays/1</id>local
    <updated>2009-05-18T15:35:55Z</updated>
    <contributor>
         <name>admin</name>
         <uri>http://finder.geocommons.com/users/admin</uri>
    </contributor>
    <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
    <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
    <author>
         <name>Michele Smith</name>
    </author>
    <georss:box></georss:box>
    <content type=quot;htmlquot;>
    </content>
</entry>
Atom Links
 <entry>
     <title>Election Precincts</title>
   <link type=quot;text/htmlquot; href=quot;http://finder.geocommons.com/overlays/1quot; rel=quot;alternatequot;/>
     <link type=quot;text/htmlquot;
     <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot;
         href=quot;http://finder.geocommons.com/overlays/index.htmlquot;
 rel=quot;alternatequot;/>
         rel=quot;alternatequot;/>
     <link type=quot;application/vnd.google-earth.kml+xmlquot; href=quot;http://finder.geocommons.com/overlays/
 1.kmlquot; rel=quot;alternatequot;/>
   <link type=quot;application/atom+xml;type=entryquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot;
     <link type=quot;application/atom+xmlquot;
         href=quot;http://finder.geocommons.com/overlays/index.atomquot;
 rel=quot;editquot;/>
     <id>http://finder.geocommons.com/overlays/1</id>local
         rel=quot;alternatequot;/>
     <updated>2009-05-18T15:35:55Z</updated>
   <link type=quot;application/vnd.google-earth.kml+xmlquot;
     <contributor>
          <name>admin</name>
         href=quot;http://finder.geocommons.com/overlays/index.kmlquot;
          <uri>http://finder.geocommons.com/users/admin</uri>
         rel=quot;alternatequot;/>
     </contributor>
     <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
     <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
     <author>
          <name>Michele Smith</name>
     </author>
     <georss:box></georss:box>
     <content type=quot;htmlquot;>
     </content>
 </entry>




A way to embed attribute data with any placemark
Atom Attribution
 <entry>
     <title>Election Precincts</title>
     <link type=quot;text/htmlquot; href=quot;http://finder.geocommons.com/overlays/1quot; rel=quot;alternatequot;/>
     <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot;
 rel=quot;alternatequot;/>
     <link type=quot;application/vnd.google-earth.kml+xmlquot; href=quot;http://finder.geocommons.com/overlays/
 1.kmlquot; rel=quot;alternatequot;/>
     <link type=quot;application/atom+xml;type=entryquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot;
 rel=quot;editquot;/>
     <id>http://finder.geocommons.com/overlays/1</id>local
     <updated>2009-05-18T15:35:55Z</updated>
     <contributor>
          <name>admin</name>
          <uri>http://finder.geocommons.com/users/admin</uri>
     </contributor>
     <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
     <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>

      <author>
     <author>
          <name>Michele Smith</name>
     </author>
          <name>Michele Smith</name>
     <georss:box></georss:box>
     <content type=quot;htmlquot;>
      </author>
     </content>
 </entry>




A way to embed attribute data with any placemark
Atom Attribution
 <entry>
     <title>Election Precincts</title>
     <link type=quot;text/htmlquot; href=quot;http://finder.geocommons.com/overlays/1quot; rel=quot;alternatequot;/>
     <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot;
 rel=quot;alternatequot;/>
     <link type=quot;application/vnd.google-earth.kml+xmlquot; href=quot;http://finder.geocommons.com/overlays/
 1.kmlquot; rel=quot;alternatequot;/>
     <link type=quot;application/atom+xml;type=entryquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot;
 rel=quot;editquot;/>
     <id>http://finder.geocommons.com/overlays/1</id>local
    <contributor>
     <updated>2009-05-18T15:35:55Z</updated>
     <contributor>
            <name>admin</name>
          <name>admin</name>
          <uri>http://finder.geocommons.com/users/admin</uri>
            <uri>http://finder.geocommons.com/users/admin</uri>
     </contributor>
    </contributor>
     <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
     <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
     <author>
          <name>Michele Smith</name>
     </author>
     <georss:box></georss:box>
     <content type=quot;htmlquot;>
     </content>
 </entry>




A way to embed attribute data with any placemark
Atom Tags
 <entry>
     <title>Election Precincts</title>
     <link type=quot;text/htmlquot; href=quot;http://finder.geocommons.com/overlays/1quot; rel=quot;alternatequot;/>
     <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot;
 rel=quot;alternatequot;/>
     <link type=quot;application/vnd.google-earth.kml+xmlquot; href=quot;http://finder.geocommons.com/overlays/
 1.kmlquot; rel=quot;alternatequot;/>
     <link type=quot;application/atom+xml;type=entryquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot;
 rel=quot;editquot;/>
     <id>http://finder.geocommons.com/overlays/1</id>local
     <updated>2009-05-18T15:35:55Z</updated>
     <contributor>
          <name>admin</name>
          <uri>http://finder.geocommons.com/users/admin</uri>
     </contributor>
    <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
     <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
     <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
    <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/>
     <author>
          <name>Michele Smith</name>
     </author>
     <georss:box></georss:box>
     <content type=quot;htmlquot;>
     </content>
 </entry>




A way to embed attribute data with any placemark
Conversion and Utilities




                           http://www.flickr.com/photos/caravinagre/1364614919
GPSBabel   http://gpsbabel.org


your swiss army knife
convert from one to another
GDAL/OGR                  http://gdal.org


when you need a powersaw instead of a swiss army knife

GDAL translates Raster data (97 formats)
OGR translates Vector data (35 formats)
GeoNames GeoRSS   http://www.geonames.org/rss-to-georss-converter.html




Converts RSS to GeoRSS

there are many more.

Más contenido relacionado

Similar a Mapping Hacks Tutorial 1

The road to professional web development
The road to professional web developmentThe road to professional web development
The road to professional web developmentChristian Heilmann
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4alexsaves
 
Mozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basiclittlebtc
 
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGroovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGuillaume Laforge
 
What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?Christophe Porteneuve
 
Google's HTML5 Work: what's next?
Google's HTML5 Work: what's next?Google's HTML5 Work: what's next?
Google's HTML5 Work: what's next?Patrick Chanezon
 
API's, Freebase, and the Collaborative Semantic web
API's, Freebase, and the Collaborative Semantic webAPI's, Freebase, and the Collaborative Semantic web
API's, Freebase, and the Collaborative Semantic webDan Delany
 
jQuery Features to Avoid
jQuery Features to AvoidjQuery Features to Avoid
jQuery Features to Avoiddmethvin
 
Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Robert Schadek
 
Tips And Tricks For Bioinformatics Software Engineering
Tips And Tricks For Bioinformatics Software EngineeringTips And Tricks For Bioinformatics Software Engineering
Tips And Tricks For Bioinformatics Software Engineeringjtdudley
 
Leveling Up at JavaScript
Leveling Up at JavaScriptLeveling Up at JavaScript
Leveling Up at JavaScriptRaymond Camden
 
Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007Guillaume Laforge
 
Webcast 09/2008 - Silverlight 2 Beta 2
Webcast 09/2008 - Silverlight 2 Beta 2Webcast 09/2008 - Silverlight 2 Beta 2
Webcast 09/2008 - Silverlight 2 Beta 2sleguiza
 
Efficient JavaScript Development
Efficient JavaScript DevelopmentEfficient JavaScript Development
Efficient JavaScript Developmentwolframkriesing
 
XML Schema Patterns for Databinding
XML Schema Patterns for DatabindingXML Schema Patterns for Databinding
XML Schema Patterns for DatabindingPaul Downey
 
JavaScript for Flex Devs
JavaScript for Flex DevsJavaScript for Flex Devs
JavaScript for Flex DevsAaronius
 
Is There Room For Another Elephant In Tucson
Is There Room For Another Elephant In TucsonIs There Room For Another Elephant In Tucson
Is There Room For Another Elephant In TucsonAndy Lenards
 

Similar a Mapping Hacks Tutorial 1 (20)

Practical Groovy DSL
Practical Groovy DSLPractical Groovy DSL
Practical Groovy DSL
 
The road to professional web development
The road to professional web developmentThe road to professional web development
The road to professional web development
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4
 
Mozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basic
 
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGroovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
 
What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?
 
Google's HTML5 Work: what's next?
Google's HTML5 Work: what's next?Google's HTML5 Work: what's next?
Google's HTML5 Work: what's next?
 
Juggling
JugglingJuggling
Juggling
 
API's, Freebase, and the Collaborative Semantic web
API's, Freebase, and the Collaborative Semantic webAPI's, Freebase, and the Collaborative Semantic web
API's, Freebase, and the Collaborative Semantic web
 
jQuery Features to Avoid
jQuery Features to AvoidjQuery Features to Avoid
jQuery Features to Avoid
 
Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...
 
Tips And Tricks For Bioinformatics Software Engineering
Tips And Tricks For Bioinformatics Software EngineeringTips And Tricks For Bioinformatics Software Engineering
Tips And Tricks For Bioinformatics Software Engineering
 
Leveling Up at JavaScript
Leveling Up at JavaScriptLeveling Up at JavaScript
Leveling Up at JavaScript
 
Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007
 
Webcast 09/2008 - Silverlight 2 Beta 2
Webcast 09/2008 - Silverlight 2 Beta 2Webcast 09/2008 - Silverlight 2 Beta 2
Webcast 09/2008 - Silverlight 2 Beta 2
 
Groovy Finance
Groovy FinanceGroovy Finance
Groovy Finance
 
Efficient JavaScript Development
Efficient JavaScript DevelopmentEfficient JavaScript Development
Efficient JavaScript Development
 
XML Schema Patterns for Databinding
XML Schema Patterns for DatabindingXML Schema Patterns for Databinding
XML Schema Patterns for Databinding
 
JavaScript for Flex Devs
JavaScript for Flex DevsJavaScript for Flex Devs
JavaScript for Flex Devs
 
Is There Room For Another Elephant In Tucson
Is There Room For Another Elephant In TucsonIs There Room For Another Elephant In Tucson
Is There Room For Another Elephant In Tucson
 

Más de Andrew Turner

GeoDC June 2012 - GeoCommons
GeoDC June 2012 - GeoCommonsGeoDC June 2012 - GeoCommons
GeoDC June 2012 - GeoCommonsAndrew Turner
 
Charlottesville Data bootcamp 2017
Charlottesville Data bootcamp 2017Charlottesville Data bootcamp 2017
Charlottesville Data bootcamp 2017Andrew Turner
 
State of the Map 2015
State of the Map 2015State of the Map 2015
State of the Map 2015Andrew Turner
 
Crisis Cartography - AAG 2013
Crisis Cartography - AAG 2013Crisis Cartography - AAG 2013
Crisis Cartography - AAG 2013Andrew Turner
 
OpenGovHub - Mapping Social Infrastructure with Social Media
OpenGovHub - Mapping Social Infrastructure with Social MediaOpenGovHub - Mapping Social Infrastructure with Social Media
OpenGovHub - Mapping Social Infrastructure with Social MediaAndrew Turner
 
OK festival Lightning Talk - Collaborative Open Geospatial Data
OK festival Lightning Talk - Collaborative Open Geospatial DataOK festival Lightning Talk - Collaborative Open Geospatial Data
OK festival Lightning Talk - Collaborative Open Geospatial DataAndrew Turner
 
GeoIQ Stack - Where 2012
GeoIQ Stack - Where 2012GeoIQ Stack - Where 2012
GeoIQ Stack - Where 2012Andrew Turner
 
Geospatial Archiving - Society of American Archivists
Geospatial Archiving - Society of American ArchivistsGeospatial Archiving - Society of American Archivists
Geospatial Archiving - Society of American ArchivistsAndrew Turner
 
Playful Explorations of Public and Personal Data - OSCON Data 2011
Playful Explorations of Public and Personal Data - OSCON Data 2011Playful Explorations of Public and Personal Data - OSCON Data 2011
Playful Explorations of Public and Personal Data - OSCON Data 2011Andrew Turner
 
Conversing around Data with Collaborative Analysis - Where2011
Conversing around Data with Collaborative Analysis - Where2011Conversing around Data with Collaborative Analysis - Where2011
Conversing around Data with Collaborative Analysis - Where2011Andrew Turner
 
tech tools for global collaboration 4 good
tech tools for global collaboration 4 goodtech tools for global collaboration 4 good
tech tools for global collaboration 4 goodAndrew Turner
 
Where2.0 That Matters
Where2.0 That MattersWhere2.0 That Matters
Where2.0 That MattersAndrew Turner
 
Humanitarian Mapping - Interaction ICCC
Humanitarian Mapping - Interaction ICCCHumanitarian Mapping - Interaction ICCC
Humanitarian Mapping - Interaction ICCCAndrew Turner
 
Open Access to Multi-Domain Collaborative Geospatial Analysis - AGU 2009
Open Access to Multi-Domain Collaborative Geospatial Analysis - AGU 2009Open Access to Multi-Domain Collaborative Geospatial Analysis - AGU 2009
Open Access to Multi-Domain Collaborative Geospatial Analysis - AGU 2009Andrew Turner
 
Crisis Mapping Lightning Talk Geo Commons
Crisis Mapping Lightning Talk   Geo CommonsCrisis Mapping Lightning Talk   Geo Commons
Crisis Mapping Lightning Talk Geo CommonsAndrew Turner
 
How Neogeography Killed GIS
How Neogeography Killed GISHow Neogeography Killed GIS
How Neogeography Killed GISAndrew Turner
 
Where2.0+Gov2.0 - Gov2.0 Summit
Where2.0+Gov2.0 - Gov2.0 SummitWhere2.0+Gov2.0 - Gov2.0 Summit
Where2.0+Gov2.0 - Gov2.0 SummitAndrew Turner
 
Library of Congress - Neogeography and Geospatial data preservation
Library of Congress - Neogeography and Geospatial data preservationLibrary of Congress - Neogeography and Geospatial data preservation
Library of Congress - Neogeography and Geospatial data preservationAndrew Turner
 
GeoCommons Open-Source GeoCoder
GeoCommons Open-Source GeoCoderGeoCommons Open-Source GeoCoder
GeoCommons Open-Source GeoCoderAndrew Turner
 
Geospatial Analysis in the Cloud
Geospatial Analysis in the CloudGeospatial Analysis in the Cloud
Geospatial Analysis in the CloudAndrew Turner
 

Más de Andrew Turner (20)

GeoDC June 2012 - GeoCommons
GeoDC June 2012 - GeoCommonsGeoDC June 2012 - GeoCommons
GeoDC June 2012 - GeoCommons
 
Charlottesville Data bootcamp 2017
Charlottesville Data bootcamp 2017Charlottesville Data bootcamp 2017
Charlottesville Data bootcamp 2017
 
State of the Map 2015
State of the Map 2015State of the Map 2015
State of the Map 2015
 
Crisis Cartography - AAG 2013
Crisis Cartography - AAG 2013Crisis Cartography - AAG 2013
Crisis Cartography - AAG 2013
 
OpenGovHub - Mapping Social Infrastructure with Social Media
OpenGovHub - Mapping Social Infrastructure with Social MediaOpenGovHub - Mapping Social Infrastructure with Social Media
OpenGovHub - Mapping Social Infrastructure with Social Media
 
OK festival Lightning Talk - Collaborative Open Geospatial Data
OK festival Lightning Talk - Collaborative Open Geospatial DataOK festival Lightning Talk - Collaborative Open Geospatial Data
OK festival Lightning Talk - Collaborative Open Geospatial Data
 
GeoIQ Stack - Where 2012
GeoIQ Stack - Where 2012GeoIQ Stack - Where 2012
GeoIQ Stack - Where 2012
 
Geospatial Archiving - Society of American Archivists
Geospatial Archiving - Society of American ArchivistsGeospatial Archiving - Society of American Archivists
Geospatial Archiving - Society of American Archivists
 
Playful Explorations of Public and Personal Data - OSCON Data 2011
Playful Explorations of Public and Personal Data - OSCON Data 2011Playful Explorations of Public and Personal Data - OSCON Data 2011
Playful Explorations of Public and Personal Data - OSCON Data 2011
 
Conversing around Data with Collaborative Analysis - Where2011
Conversing around Data with Collaborative Analysis - Where2011Conversing around Data with Collaborative Analysis - Where2011
Conversing around Data with Collaborative Analysis - Where2011
 
tech tools for global collaboration 4 good
tech tools for global collaboration 4 goodtech tools for global collaboration 4 good
tech tools for global collaboration 4 good
 
Where2.0 That Matters
Where2.0 That MattersWhere2.0 That Matters
Where2.0 That Matters
 
Humanitarian Mapping - Interaction ICCC
Humanitarian Mapping - Interaction ICCCHumanitarian Mapping - Interaction ICCC
Humanitarian Mapping - Interaction ICCC
 
Open Access to Multi-Domain Collaborative Geospatial Analysis - AGU 2009
Open Access to Multi-Domain Collaborative Geospatial Analysis - AGU 2009Open Access to Multi-Domain Collaborative Geospatial Analysis - AGU 2009
Open Access to Multi-Domain Collaborative Geospatial Analysis - AGU 2009
 
Crisis Mapping Lightning Talk Geo Commons
Crisis Mapping Lightning Talk   Geo CommonsCrisis Mapping Lightning Talk   Geo Commons
Crisis Mapping Lightning Talk Geo Commons
 
How Neogeography Killed GIS
How Neogeography Killed GISHow Neogeography Killed GIS
How Neogeography Killed GIS
 
Where2.0+Gov2.0 - Gov2.0 Summit
Where2.0+Gov2.0 - Gov2.0 SummitWhere2.0+Gov2.0 - Gov2.0 Summit
Where2.0+Gov2.0 - Gov2.0 Summit
 
Library of Congress - Neogeography and Geospatial data preservation
Library of Congress - Neogeography and Geospatial data preservationLibrary of Congress - Neogeography and Geospatial data preservation
Library of Congress - Neogeography and Geospatial data preservation
 
GeoCommons Open-Source GeoCoder
GeoCommons Open-Source GeoCoderGeoCommons Open-Source GeoCoder
GeoCommons Open-Source GeoCoder
 
Geospatial Analysis in the Cloud
Geospatial Analysis in the CloudGeospatial Analysis in the Cloud
Geospatial Analysis in the Cloud
 

Último

Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 

Último (20)

Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 

Mapping Hacks Tutorial 1

  • 1. Where 2.0 Mapping Hacks Tutorial 1 Andrew Turner FortiusOne ajturner@gmail.com Rabble ENTP evan@protest.net Welcome to Mapping the Mapping Hacks with Google, Yahoo, Open Street Map, and fellow travelers. I’m Rabble, i like to cause trouble, and think maps are fun. I don’t do this for a living. I’m Andrew, i like to build maps and i do do this for a living.
  • 2. Mapping Hacks Tutorial What’s Covered? Building Maps Part I Building Data Part II This tutorial is divided up in to two parts. First half is the building and display of maps. Then we’ll have a break, and the second half will be about the data of maps.
  • 3. Feel free to ask questions at any time. http://flickr.com/photos/seandreilinger/2326448445
  • 4. Building Maps How to build maps, and put them on the web. The scope of this tutorial is limited to web mapping.
  • 5. Building Data The second half of the workshop is how to get and manipulate mapping data. There’s a huge amount of geodata out there, the trick is getting it in to useful formats.
  • 6. Building Data == Later == Part II But that’s for the second half, after the break. Before we can get there, we need to be able to see it.
  • 7. Building Maps On Other People’s API’s It’s possible to use pure open source data and software to do mapping. For the more advanced examples we will use these tools. But the vast majority of mapping hacks today are built upon google maps, so we will start by walking through how to build on top of and extend google maps.
  • 8. Terminology •Vector •XML •Raster •REST •Feature •Proprietary - Open •Attributes First, some terminology to help
  • 9. Terminology •Vector •XML •Raster •REST •Feature •Proprietary - Open •Attributes First, some terminology to help
  • 10. Terminology •Vector •XML •Raster •REST •Feature •Proprietary - Open •Attributes First, some terminology to help
  • 11. Terminology •Vector •XML •Raster •REST •Feature •Proprietary - Open •Attributes First, some terminology to help
  • 12. Terminology •Vector •XML •Raster •REST •Feature •Proprietary - Open •Attributes First, some terminology to help
  • 13. Terminology <element attribute=quot;valuequot;> •Vector •XML content </element> •Raster •REST •Feature •Proprietary - Open •Attributes First, some terminology to help
  • 14. Terminology <element attribute=quot;valuequot;> •Vector •XML content </element> •Raster •REST http://host/resource.format •Feature •Proprietary - Open •Attributes First, some terminology to help
  • 15. Terminology: Geometries • Point • LineString • Box • Polygon • MultiGeometry • Coordinate Reference System (aka Projection) Even with “location” there are several important types of geometries that are common. Almost all the formats we’ll talk about support all these geometry types. So we’ll show some examples, but assume you’ll need to know what’s appropriate, but that it’s probably supported.
  • 16. Terminology: Geometries • Point • LineString • Box • Polygon • MultiGeometry • Coordinate Reference System (aka Projection) Even with “location” there are several important types of geometries that are common. Almost all the formats we’ll talk about support all these geometry types. So we’ll show some examples, but assume you’ll need to know what’s appropriate, but that it’s probably supported.
  • 17. Terminology: Geometries • Point • LineString • Box • Polygon • MultiGeometry • Coordinate Reference System (aka Projection) Even with “location” there are several important types of geometries that are common. Almost all the formats we’ll talk about support all these geometry types. So we’ll show some examples, but assume you’ll need to know what’s appropriate, but that it’s probably supported.
  • 18. Terminology: Geometries • Point • LineString • Box • Polygon • MultiGeometry • Coordinate Reference System (aka Projection) Even with “location” there are several important types of geometries that are common. Almost all the formats we’ll talk about support all these geometry types. So we’ll show some examples, but assume you’ll need to know what’s appropriate, but that it’s probably supported.
  • 19. Terminology: Geometries • Point • LineString • Box • Polygon • MultiGeometry • Coordinate Reference System (aka Projection) Even with “location” there are several important types of geometries that are common. Almost all the formats we’ll talk about support all these geometry types. So we’ll show some examples, but assume you’ll need to know what’s appropriate, but that it’s probably supported.
  • 20. Terminology: Geometries • Point • LineString • Box • Polygon • MultiGeometry • Coordinate Reference System (aka Projection) Even with “location” there are several important types of geometries that are common. Almost all the formats we’ll talk about support all these geometry types. So we’ll show some examples, but assume you’ll need to know what’s appropriate, but that it’s probably supported.
  • 21. Terminology: Geometries • Point • LineString • Box • Polygon • MultiGeometry • Coordinate Reference System (aka Projection) Even with “location” there are several important types of geometries that are common. Almost all the formats we’ll talk about support all these geometry types. So we’ll show some examples, but assume you’ll need to know what’s appropriate, but that it’s probably supported.
  • 22. Longitude is the X Latitude Longitude [x,y]
  • 23. Longitude is the X Latitude Longitude [x,y]
  • 24. Google Maps Web mapping has been around for a long time, but it was really the advent of google maps which got the masses hacking on web maps.
  • 25. Mapstraction Beyond our first demos we’ll get in to how to use the mapstraction library. It lets you easily move between mapping apis, it’s open source, and works with many data sources.
  • 27. OpenLayers Then we’re going to end with some examples built in OpenLayers which give you the most flexibility in your map hacking.
  • 29. Mapstraction Recipe 1.Include Javascripts 2.Create an HTML Map Div 3.Create a JavaScript Mapstraction object 4.Center the Map 5.Add Controls 6.Add Features - Markers, Polylines, Overlays, etc. 7.Events
  • 31. OpenLayers http://openlayers.org
  • 32. map = new OpenLayers.Map(quot;mapquot;, { maxResolution: 360/512, projection: quot;EPSG:4326quot; , numZoomLevels: 20, minZoomLevel: 0, maxZoomLevel: 19, controls: [ new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanPanel(), new OpenLayers.Control.ZoomPanel() ] }); var wms = new OpenLayers.Layer.WMS( quot;worldquot;, quot;/cgi-bin/tilecache/tilecache.cgi?quot;, {layers: 'world'} ); map.addLayers([wms]); map.setCenter(new OpenLayers.LonLat(0, 32), 7);
  • 33. map = new OpenLayers.Map(quot;mapquot;, { maxResolution: 360/512, projection: quot;EPSG:4326quot; , numZoomLevels: 20, minZoomLevel: 0, maxZoomLevel: 19, controls: [ new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanPanel(), new OpenLayers.Control.ZoomPanel() ] }); var wms = new OpenLayers.Layer.WMS( quot;worldquot;, quot;/cgi-bin/tilecache/tilecache.cgi?quot;, {layers: 'world'} ); map.addLayers([wms]); map.setCenter(new OpenLayers.LonLat(0, 32), 7);
  • 34. <link rel=quot;stylesheetquot; href=quot;../themes/gray.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;gray smallmapquot;></div>
  • 35. <link rel=quot;stylesheetquot; href=quot;../themes/gray.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;gray smallmapquot;></div> div.gray .olControlZoomPanel { top: 14px; left: 14px; } div.gray .olControlZoomPanel div { background-image: url(img/gray/gray_zoom_horiz.png); height: 18px; width: 18px; } div.gray .olControlZoomPanel .olControlZoomInItemInactive { top: 0px; left: 25px; background-position: 18px 0px; } div.gray .olControlZoomPanel .olControlZoomToMaxExtentItemInactive { top: 0px; left: 0px; background-position: 0px -18px; } div.gray .olControlZoomPanel .olControlZoomOutItemInactive { top: 0px; left: 0px; background-position: 0px 0px; }
  • 36. <link rel=quot;stylesheetquot; href=quot;../themes/gray.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;gray smallmapquot;></div> div.gray .olControlZoomPanel { top: 14px; left: 14px; } div.gray .olControlZoomPanel div { background-image: url(img/gray/gray_zoom_horiz.png); height: 18px; width: 18px; } div.gray .olControlZoomPanel .olControlZoomInItemInactive { top: 0px; left: 25px; background-position: 18px 0px; } div.gray .olControlZoomPanel .olControlZoomToMaxExtentItemInactive { top: 0px; left: 0px; background-position: 0px -18px; } div.gray .olControlZoomPanel .olControlZoomOutItemInactive { top: 0px; left: 0px; background-position: 0px 0px; }
  • 37. <link rel=quot;stylesheetquot; href=quot;../themes/hearts.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;hearts smallmapquot;></div>
  • 38. <link rel=quot;stylesheetquot; href=quot;../themes/hearts.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;hearts smallmapquot;></div> .hearts .olControlZoomPanel div { background-image: url(img/hearts/hearts-zoom.png); } .hearts .olControlPanPanel div { background-image: url(img/hearts/hearts-panel.png); }
  • 39. <link rel=quot;stylesheetquot; href=quot;../themes/hearts.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;hearts smallmapquot;></div> .hearts .olControlZoomPanel div { background-image: url(img/hearts/hearts-zoom.png); } .hearts .olControlPanPanel div { background-image: url(img/hearts/hearts-panel.png); }
  • 41.
  • 42.
  • 43.
  • 45. package { public class ModestMapsSample extends Sprite { private var map:Map; public function ModestMapsSample() { map = new TweenMap(stage.stageWidth - 2 * PADDING, stage.stageHeight - 2 * PADDING, true, new MicrosoftRoadMapProvider(), new MapExtent(37.829853, 37.700121, -122.212601, -122.514725)); map.addChild(new MapControls(map)); map.addChild(new ZoomSlider(map)); addChild(map); } } }
  • 46. London2012 http://london2012.co.uk
  • 47. Hurricane Tracking http://hurricanewiki.org
  • 48. Bakery Routing http://carto.iict.ch/www/broetlikrones/htdocs/index.php
  • 49. MySociety House Price http://www.mysociety.org/2007/more-travel-maps/ vs. Travel Time
  • 50. Hacking with Google, Virtual Earth and Yahoo's Maps API II Data
  • 51. Why does open, interoperable data matter? We just went over how you can create markers with javascript, from a database. Why would you bother spending time and resources working with formats that man mean other people can use your data?
  • 52. http://www.flickr.com/photos/blah_oh_well/352203022 It’s not enough for a Web App to be Sticky... Common design principles want to make a website “sticky”. To encourage users to stay at the site and return often. But this is no longer sufficient - users want more.
  • 53. http://www.flickr.com/photos/orinrobertjohn/139788703 ...it also needs to be stringy. Web applications need to be “Stringy” - they need to provide ways for users to move their data into, and out of the system. It needs to connect into the rest of their personal and corporate suite of tools, workflows, and expectations.
  • 54. http://www.flickr.com/photos/josefstuefer/9500503 almost like a web Sites need to be sticky, and stringy. Kind of like a web. or better known as The Web - we’ll get back to that later
  • 55. Why does it really matter? Traction is good - but won’t I be the only one doing this? How will it get you business?
  • 56. photo credits .gov let’s look at an actual use case for why this is important
  • 57. .gov photo credits
  • 58. photo credits Recovery.gov Recovery.gov is a very new, and quickly conceived and implemented initiative to track all the stimulus dollars: from tax payer, to gov’t, to agency, to project, to tax payer.
  • 59. photo credits A Chance for Change http://isd.ischool.berkeley.edu/stimulus/2009-029/ Given the new administration support for new initiatives and Transparency, it’s a chance for agencies, and citizens, to engage in rethinking how it’s all done. They’re talking about GeoRSS AtomPub, KML, Linked Open Data, RDFa. All the hot topics on data sharing - the point of this workshop.
  • 60. photo credits TimeMap Mockup The UC Berkeley iSchool has published papers, example websites, and example feeds about how it *could* be done.
  • 61. photo credits Data.gov And it’s just the beginning. Data.gov will incorporate these ideas across the federal, and subsequently local, governments. This will be they ways in which information is spread in the US Government.
  • 62. International Open Data And it’s not just the US government, it also applies internationally to directives such as INSPIRE which is working in the EU to open data.
  • 63. THEREFORE BE IT RESOLVED THAT the City of Vancouver endorses the principles of: • Open and Accessible Data - the City of Vancouver will freely share with citizens, businesses and other jurisdictions the greatest amount of data possible while respecting privacy and security concerns; • Open Standards - the City of Vancouver will move as quickly as possible to adopt prevailing open standards for data, documents, maps, and other formats of media; motion, May 15, 2009 Governments are enforcing data standards. This is a big win from getting data for your system, as well as providing them technology that works within their ecosystem.
  • 64. http://www.flickr.com/photos/bitterlysweet/33358201 Why is it so hard? So if everyone is clamoring over open, sharable data - why has it been so hard?
  • 65. photo credits lots of this Sheets of CSV files Currently data is shared either by large spreadsheets of unstructured (or at best semi- structured) tabular data
  • 66. photo credits http://www.flickr.com/photos/johncharlton/360919818 Each Format is Unique Even when there is structure, people use arbitrary markups, formats, schemas.
  • 67. photo credits http://www.flickr.com/photos/bookgrl/3111647593 ...and unlinked And there has been no way to know if one location was the same as another - or a person or project had a link to more about them.
  • 68. ...and proprietary http://www.flickr.com/photos/documentarist/473084939/
  • 69. http://www.flickr.com/photos/fragilelisa/3212684410 But that’s changing There is a brighter future - it’s happening grass-roots, top-down, and sideways.
  • 70. http://www.flickr.com/photos/huladancer22/530743543/ Formats There are a number of different formats - each of which is appropriate depending on what you’re trying to do.
  • 71. http://www.flickr.com/photos/tomhe/311381947 What do you want to do? The first, overarching thing you can do when choosing the formats to support is consider what you are trying to accomplish. Interchange Visualization Analysis
  • 73. GeoRSS GeoRSS simply adds Geo to RSS/Atom
  • 74. GeoRSS GeoRSS simply adds Geo to RSS/Atom
  • 75. GeoRSS + GeoRSS simply adds Geo to RSS/Atom
  • 76. GeoRSS <georss:point> + 45.256 -71.92 </georss:point> GeoRSS simply adds Geo to RSS/Atom
  • 77. GeoRSS <georss:point> + 45.256 -71.92 </georss:point> GeoRSS simply adds Geo to RSS/Atom
  • 78. GeoRSS <georss:point> + 45.256 -71.92 </georss:point> GeoRSS simply adds Geo to RSS/Atom
  • 79. RSS / Atom <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> <feed xmlns=quot;http://www.w3.org/2005/Atomquot; xmlns:georss=quot;http://www.georss.org/ georssquot; xmlns:local=quot;http://oakland.crimespotting.org/nsquot;> <title>Oakland Crime Feed</title> <link href=quot;http://oakland.crimespotting.org/~migurski/oaklandcrime/wwwquot;/> <updated local:date=quot;Wednesday, Apr 29, 2009quot; local:time=quot;6:30pmquot;>2009-04-29T18:30:00-07:00</updated> <entry> <title>THEFT</title> <link rel=quot;alternatequot; href=quot;http://oakland.crimespotting.org/~migurski/ oaklandcrime/www/crime/2009-04-29/Theft/127204quot;/> <id>crime:oakland/09-029660/THEFT</id> <updated local:date=quot;Wednesday, Apr 29, 2009quot; local:time=quot;6:30pmquot;>2009-04-29T18:30:00-07:00</updated> <category term=quot;THEFTquot; label=quot;Theftquot;/> <content type=quot;htmlquot;><![CDATA[<h3>Theft</h3><h4>Wednesday, Apr 29, 2009 6:30pm</h4>...]]></content> </entry> </feed> http://oakland.crimespotting.org go from this:
  • 80. GeoRSS: Example <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> <feed xmlns=quot;http://www.w3.org/2005/Atomquot; xmlns:georss=quot;http://www.georss.org/ georssquot; xmlns:local=quot;http://oakland.crimespotting.org/nsquot;> <title>Oakland Crime Feed</title> <link href=quot;http://oakland.crimespotting.org/~migurski/oaklandcrime/wwwquot;/> <updated local:date=quot;Wednesday, Apr 29, 2009quot; local:time=quot;6:30pmquot;>2009-04-29T18:30:00-07:00</updated> <entry> <title>THEFT</title> <link rel=quot;alternatequot; href=quot;http://oakland.crimespotting.org/~migurski/ oaklandcrime/www/crime/2009-04-29/Theft/127204quot;/> <id>crime:oakland/09-029660/THEFT</id> <updated local:date=quot;Wednesday, Apr 29, 2009quot; local:time=quot;6:30pmquot;>2009-04-29T18:30:00-07:00</updated> <category term=quot;THEFTquot; label=quot;Theftquot;/> <georss:point>37.807417 -122.275233</georss:point> <content type=quot;htmlquot;><![CDATA[<h3>Theft</h3><h4>Wednesday, Apr 29, 2009 6:30pm</h4>...]]></content> </entry> </feed> http://oakland.crimespotting.org to this - with geo added
  • 81. GeoRSS Spotlight: Reuters News Reuters News Reuters news is one example of a site that you can get GeoRSS to view the news where it’s happening.
  • 82. GeoRSS Spotlight: Reuters News Reuters News Reuters news is one example of a site that you can get GeoRSS to view the news where it’s happening.
  • 83. photo credits GeoRSS Spotlight: http://oakland.crimespotting.org/ Oakland Crimespotting
  • 84. GeoRSS Spotlight: http://earthquake.usgs.gov/eqcenter/catalogs/ USGS
  • 85. GeoRSS Spotlight: FriendFeed
  • 86. GeoRSS Future • Supports point, line, box, polygon • Not an ‘official’ standard. OGC best practice • Used by most mapping tools • Next generation: • External, by reference, geometries (e.g. link to “US”) • Multiple geometries per entry http://georss.org
  • 88. GeoJSON very compact - only requires an eval() to turn into JavaScript objects.
  • 89. GeoJSON { quot;keyquot;: quot;valuequot;, quot;dictionaryquot; : { quot;index1quot;:quot;another valuequot;, quot;index2quot;:quot;more valuesquot; }} very compact - only requires an eval() to turn into JavaScript objects.
  • 90. GeoJSON: Point { quot;typequot;: quot;Pointquot;, quot;coordinatesquot;: [100.0, 0.0] } Supports all the standard geometry types.
  • 91. GeoJSON: LineString { quot;typequot;: quot;LineStringquot;, quot;coordinatesquot;: [ [100.0, 0.0], [101.0, 1.0] ] }
  • 92. GeoJSON: Polygon { quot;typequot;: quot;Polygonquot;, quot;coordinatesquot;: [[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ]] }
  • 93. GeoJSON: MultiGeometry { quot;typequot;: quot;MultiPointquot;, quot;coordinatesquot;: [ [100.0, 0.0], [101.0, 1.0] ] }
  • 94. GeoJSON: MultiGeometry { quot;typequot;: quot;GeometryCollectionquot;, quot;geometriesquot;: [ { quot;typequot;: quot;Pointquot;, quot;coordinatesquot;: [100.0, 0.0] }, { quot;typequot;: quot;LineStringquot;, quot;coordinatesquot;: [ [101.0, 0.0], [102.0, 1.0] ] } ] } Supports multiple geometries
  • 95. GeoJSON: CRS quot;crsquot;: { quot;typequot;: quot;namequot;, quot;propertiesquot;: { quot;namequot;: quot;urn:ogc:def:crs:OGC:1.3:CRS84quot; } } quot;crsquot;: { quot;typequot;: quot;linkquot;, quot;propertiesquot;: { quot;hrefquot;: quot;http://example.com/crs/42quot;, quot;typequot;: quot;proj4quot; } } Projections
  • 96. GeoJSON: Atom { quot;blogquot;: { quot;postsquot;: [ { quot;typequot;: quot;atom:itemquot;, quot;atom:summaryquot;: quot;post 1quot;, quot;atom:descriptionquot;: quot;i love bloggingquot; }, { quot;typequot;: quot;atom:itemquot;, quot;atom:summaryquot;: quot;post 2 from CAquot;, quot;atom:descriptionquot;: quot;geoblogging in Californiaquot; quot;geometryquot;: { quot;typequot;, quot;Pointquot;, quot;coordinatesquot;: [-120, 40] } }, ], quot;geometryquot;: { quot;typequot;: quot;Polygonquot;, quot;coordinatesquot;: [[[-121, 39], [-119, 39], [-119, 41], [-121, 41], [-121, 39]]] } } } An example of Atom encoded in GeoJSON
  • 98. GPX • Common Format for GPS (XML) • Stores • Waypoints (wpt) • Tracks (trk) • Routes (rte) • Useful for importing from GPS (for geotagging photos) or exporting to (tracks, waypoints, points of interest) GPS Exchange format Used for exporting/importing to GPS Devices
  • 99. GPX: Track <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <gpx xmlns:xsi=quot;http://www.w3.org/2001/XMLSchema-instancequot; xmlns=quot;http://www.topografix.com/GPX/1/0quot; version=quot;1.0quot; creator=quot;GPSBabel - http://www.gpsbabel.orgquot; xsi:schemaLocation=quot;http:// www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsdquot;> <time>2007-12-26T00:42:06Z</time> <bounds minlat=quot;39.9168108quot; minlon=quot;116.4112773quot; maxlat=quot;40.48346838quot; maxlon=quot;116.65506564quot;/> <trk> <name>ACTIVE LOG #2</name> <number>1</number> <trkseg> <trkpt lat=quot;39.923049649quot; lon=quot;116.413739165quot;> <ele>55.413086</ele> <time>2007-12-25T00:00:22Z</time> </trkpt> <trkpt lat=quot;39.923191974quot; lon=quot;116.414713562quot;> <ele>69.352295</ele> <time>2007-12-25T00:00:31Z</time> </trkpt> <trkpt lat=quot;39.923132882quot; lon=quot;116.416241163quot;> <ele>66.948975</ele> <time>2007-12-25T00:00:41Z</time> </trkpt> <trkpt lat=quot;39.923161631quot; lon=quot;116.417345395quot;> <ele>71.274902</ele> <time>2007-12-25T00:00:49Z</time> </trkpt> <trkpt lat=quot;39.923143359quot; lon=quot;116.417817045quot;> <ele>72.236206</ele> Waypoints, Tracks, Routes <time>2007-12-25T00:00:55Z</time> </trkpt>
  • 100. photo credits GPX Example: GPSies http://gpsies.com
  • 101. GPX Example: GPSies http://gpsies.com
  • 102. CSV - Comma Separated Value quot;namequot;,quot;holeparquot;,quot;holeyardagequot;,quot;holenumberquot;,quot;latitudequot;,quot;longitudequot; quot;Simple placemarkquot;,quot;4.0quot;,quot;234.0quot;,quot;1.0quot;,quot;-121.082203542568quot;,quot;37.4222899014025quot; quot;Simple placemark 2quot;,quot;3.0quot;,quot;100.0quot;,quot;2.0quot;,quot;-121.082203542568quot;,quot;37.4222899014025quot; quot;namequot;,quot;holeparquot;,quot;holeyardagequot;,quot;holenumberquot;,quot;addressquot; quot;Simple placemarkquot;,quot;4.0quot;,quot;234.0quot;,quot;1.0quot;,quot;1517 N. Main St., Royal Oak, MIquot; quot;Simple placemark 2quot;,quot;3.0quot;,quot;100.0quot;,quot;2.0quot;,quot;2200 Wilson Blvd., Arlington, VAquot; can embed Lat,lon as columns - or WKB (well known binary) string
  • 105. KML http://code.google.com/apis/kml/ documentation/kmlreference.html photourl KML emerged as a commonly used format for sharing data. It meets the 80% case for geographic information, human-readable information, metadata, attributes, temporal, 3D, navigation and more. Surprisingly capable for a simple format.
  • 106. KML <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <kml xmlns=quot;http://earth.google.com/kml/2.2quot;> <Placemark> <name>Simple placemark</name> <description>Attached to the ground. Intelligently places itself at the height of the underlying terrain.</description> <Point> <coordinates>-122.0822035425683,37.42228990140251,0</coordinates> </Point> </Placemark> </kml>
  • 110. KML 3D KML can be styled with icons, colors, labels, and even 3D.
  • 111. KML: Extended Data <ExtendedData id=quot;roomsquot;> <name>Rooms</name> <value>3</value> </ExtendedData> A way to embed attribute data with any placemark
  • 112. KML: Styles <Style id='class_0'> ... </Style> <Placemark> <styleUrl>#class_1</styleUrl>
  • 113. KML: Styles <Style id='class_0'> <PolyStyle> Polygon <color>bfa5f7fe</color> <fill>1</fill> <outline>1</outline> </PolyStyle> <LineStyle> <color>ffa5f7fe</color> <width>2</width> Line </LineStyle> <IconStyle> <color>bfa5f7fe</color> <scale>1</scale> <Icon> Icon <href>http://maker.geocommons.com/images/icons/propCircle.png</href> </Icon> <hotSpot x=quot;0.5quot; y=quot;0.5quot; xunits=quot;fractionquot; yunits=quot;fractionquot;/> </IconStyle> <BalloonStyle> <text> Info Window <![CDATA[<p><b>Number of Installations:</b> $[selected_attribute]</p> <p><b>cost per 0:</b> $[cost]<br/><b>Description:</b> $[description]<br/> <b>Incentives:</b> $[incentives]<br/><b>Name:</b> $[name]<br/> <b>Size of installs (kW):</b> $[size]<br/><b>Zipcode:</b> $[zipcode]<br/></p> <p><a href=quot;http://maker.geocommons.com/maps/5015quot;>View the map in Maker<i>!</i></p>]]></text> </BalloonStyle> </Style>
  • 114. KML: Network Links index.kml layer1.kml layer2.kml layer3.kml <NetworkLink> <name><![CDATA[Pubs in London]]></name> <Link> <href>http://maker.geocommons.com/maps/839/overlays/1</href> </Link> </NetworkLink> Link to other KML files within a KML file. Useful for directory listings of KML.
  • 116. KML Spotlight: Flickr Export Flickr photos can be exported using the GeoRSS (geoFeed) or KML links at the bottom of Flickr pages. This is useful for viewing in GoogleEarth.
  • 118. KMZ - Zipped KML All the verbosity, 10% the size. Cunning in the simplicity of assigning a Zip compression as an actual type. Makes it very easy to expose via RESTful services and mime-types. Very useful when bundling multiple KML files and 3D models together.
  • 119. Other Visualization Formats •SLD - Styled Layer Descriptor •Mapnik •Cascadenik SLD - an OGC specification. Uses bits of CSS and a lot of XML Mapnik - the mapnik map rendering library has it’s own styling XML Cascadenik - a CSS3-like map styling, with preprocesses for exporting to Mapnik styling
  • 120. example.mml example.mss <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> * { <!DOCTYPE Map> line-width: 1; <Map bgcolor=quot;#b5d0d0quot; srs=quot;...quot;> line-color: #999; <Stylesheet> polygon-fill: #fff; Map { map-bgcolor: #ccc; } } </Stylesheet> <Stylesheet src=quot;example.mssquot;/> *[zoom>=6][zoom<12] { <Layer name=quot;worldquot; status=quot;onquot; srs=quot;...quot;> line-color: #f90; <StyleName>world</StyleName> } <Datasource> #world-borders[zoom<10] NAME <Parameter name=quot;typequot;>shape</Parameter> { <Parameter name=quot;filequot;>...</Parameter> text-fill: #333; </Datasource> } </Layer> </Map> Cascadenick http://code.google.com/p/mapnik-utils/
  • 122. Shapefile A misnomer - not a single “File”, but multiple files: SHP geometry, DBF database, SHX data- geometry join, PRJ projection file, XML metadata. ESRI Proprietary format - though now widely used. Limited to 10 character attribute titles. All geometries must be the same ‘type’ (all points, or all polygons, but not both)
  • 124. File GeoDatabases new ESRI proprietary format - a big problem
  • 125. SQLite / Spatialite An alternative. Compact, file based databases. Spatialite adds spatial extensions
  • 128. OGC Web Feature Service - WFS an interface definition for querying Vector datastores
  • 129. OGC Web Mapping Service - WMS an interface for querying Raster data stores
  • 130. http://www.flickr.com/photos/mattphotos/228669751/ What again did you want to do? Now that we’ve done a very quick overview of the formats - let’s look at how to decide what formats to use.
  • 131. File Sizes File Type Size CSV (points) 3.7k KML 460k Shapefile 208k Proposed Stimulus Spending http://finder.geocommons.com/overlays/9313 The first is strictly technical - what is the file size of these formats? How doest that affect the user (mobile, costs, server)
  • 132. User Compatibility • Feed Readers • GoogleEarth • Mapping API’s • Browsers What tools will the user be using to consume or produce this information?
  • 133. http://www.flickr.com/photos/samiksha/406928440 What does the user understand? What terms do they understand? KML has done very well because people know what “GoogleEarth” is and means. They may have an “RSS Reader”, but they probably don’t have “ArcGIS Desktop” or QGIS. They almost all have Excel to read CSV.
  • 134. http://www.flickr.com/photos/umpqua/191909440 What does the data Form follows Function suggest? The purpose of the data informs how it should be exposed and utilized. Is it just for an API? Is it for users to subscribe to? Visualize? Analyze?
  • 135. GeoWeb Fortunately, there is the Web. It allows for linking together data
  • 136. Resources •/places •/places/89 •/places/89.atom •/places/89.kml •/places/89.sqlite Don’t have to choose a single format - provide many. Appropriate for basic or advanced users and developers
  • 137. Web Aligned http://highearthorbit.com/a-proposal-georss-kml Link to the other formats. Tools are getting better at following these links.
  • 138. http://www.flickr.com/photos/alfr3do/7436142 What does the user understand? What terms do they understand? KML has done very well because people know what “GoogleEarth” is and means. They may have an “RSS Reader”, but they probably don’t have “ArcGIS Desktop” or QGIS. They almost all have Excel to read CSV.
  • 139. Create Exif GeoRSS KML GPX Geocoding GeoStack Publish KML GeoRSS Microformats MachineTags Aggregate KML GeoRSS GML WFS GeoJSON Consume Interchange formats
  • 140. Finding Data http://www.flickr.com/photos/mmmazzoni/110019759
  • 142. OpenSearch Template http://geocommons.com/search ?keyword={searchTerms} &limit={count?} &page={startPage?} required optional? OpenSearch is essentially a way to template out search parameters from a URL.
  • 143. OpenSearch - HTML <html xmlns=quot;http://www.w3.org/1999/xhtmlquot; xml:lang=quot;enquot; lang=quot;enquot;> <head> <title>Starting a Business in San Francisco map</title> <link type=quot;application/opensearchdescription+xmlquot; title=quot;Mapufacturequot; rel=quot;searchquot; href=quot;http://geocommons.com/search.xmlquot; /> <link type=quot;application/atom+xmlquot; title=quot;Mapufacture GeoRSS Feed for Starting a Business in San Franciscoquot; rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.atomquot; /> <link type=quot;application/vnd.google-earth.kml+xmlquot; title=quot;Mapufacture KML for Starting a Business in San Franciscoquot; rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.kmlquot; /> </head> <body> ... </body> </html> If you provide a link in your HTML page to the OpenSearch - browsers like Firefox, Safari, and Internet Explorer can embed these into browser search bars. Even MS Windows 7 can connect OpenSearch providers into your *desktop search* to the web.
  • 144. OpenSearch - HTML <html xmlns=quot;http://www.w3.org/1999/xhtmlquot; xml:lang=quot;enquot; lang=quot;enquot;> <head> <title>Starting a Business in San Francisco map</title> <link type=quot;application/opensearchdescription+xmlquot; title=quot;Mapufacturequot; rel=quot;searchquot; href=quot;http://geocommons.com/search.xmlquot; /> <link type=quot;application/atom+xmlquot; title=quot;Mapufacture GeoRSS Feed for Starting a Business in San Franciscoquot; rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.atomquot; /> <link type=quot;application/vnd.google-earth.kml+xmlquot; title=quot;Mapufacture KML for Starting a Business in San Franciscoquot; rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.kmlquot; /> </head> <body> ... </body> </html> If you provide a link in your HTML page to the OpenSearch - browsers like Firefox, Safari, and Internet Explorer can embed these into browser search bars. Even MS Windows 7 can connect OpenSearch providers into your *desktop search* to the web.
  • 145. OpenSearch - HTML <html xmlns=quot;http://www.w3.org/1999/xhtmlquot; xml:lang=quot;enquot; lang=quot;enquot;> <head> <title>Starting a Business in San Francisco map</title> <link type=quot;application/opensearchdescription+xmlquot; title=quot;Mapufacturequot; rel=quot;searchquot; href=quot;http://geocommons.com/search.xmlquot; /> <link type=quot;application/atom+xmlquot; title=quot;Mapufacture GeoRSS Feed for Starting a Business in San Franciscoquot; rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.atomquot; /> <link type=quot;application/vnd.google-earth.kml+xmlquot; title=quot;Mapufacture KML for Starting a Business in San Franciscoquot; rel=quot;alternatequot; href=quot;http://geocommons.com/maps/1621.kmlquot; /> </head> <body> ... </body> </html> If you provide a link in your HTML page to the OpenSearch - browsers like Firefox, Safari, and Internet Explorer can embed these into browser search bars. Even MS Windows 7 can connect OpenSearch providers into your *desktop search* to the web.
  • 146. Description Document <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <OpenSearchDescription xmlns=quot;http://a9.com/-/spec/opensearch/1.1/quot; xmlns:geo=quot;http://a9.com/-/opensearch/extensions/geo/1.0/quot;> <ShortName>GeoCommons</ShortName> <Description>Search for maps and data in GeoCommons</Description> <Tags>geo georss location kml aggregation geosearch</Tags> <Contact>robot@geocommons.com</Contact> <Image width=quot;16quot; height=quot;16quot; type=quot;image/x-iconquot;>http://geocommons.com/ favicon.ico</Image> <Url type=quot;text/htmlquot; template=quot;http://maker.geocommons.com/searches? query={searchTerms}&amp;limit={count?}&amp;page={startPage?}quot;/> <Url type=quot;application/atom+xmlquot; template=quot;http://maker.geocommons.com/ searches.atom?query={searchTerms?}&amp;limit={count?}&amp;page={startPage?}quot;/> </OpenSearchDescription> http://maker.geocommons.com/search.xml There is a description document that is hosted on your site.
  • 147. Formats <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <OpenSearchDescription xmlns=quot;http://a9.com/-/spec/opensearch/1.1/quot; xmlns:geo=quot;http://a9.com/-/opensearch/extensions/geo/1.0/quot;> <ShortName>Mapufacture</ShortName> <Description>Search for geographic items in Mapufacture</Description> <Tags>geo georss location kml aggregation geosearch</Tags> <Contact>robot@geocommons.com</Contact> <Image width=quot;16quot; height=quot;16quot; type=quot;image/x-iconquot;>http://geocommons.com/favicon.ico</Image> <Url type=quot;text/htmlquot; template=quot;http://geocommons.com/search? keyword={searchTerms}&dtstart={time:start?}&dtend={time:stop?}&location={geo:locationString?}&la t={geo:lat?}&lon={geo:lon?}&distance={geo:radius?}&bbox={geo:box?}&limit={count?}&page={startPag e?}quot;/> <Url type=quot;application/atom+xmlquot; template=quot;http://geocommons.com/search.atom? keyword={searchTerms}&dtstart={time:start?}&dtend={time:stop?}&location={geo:locationString?}&la t={geo:lat?}&lon={geo:lon?}&distance={geo:radius?}&bbox={geo:box?}&limit={count?}&page={startPag e?}quot;/> <Url type=quot;application/vnd.google-earth.kml+xmlquot; template=quot;http://geocommons.com/search.kml? keyword={searchTerms}&dtstart={time:start?}&dtend={time:stop?}&location={geo:locationString?}&la t={geo:lat?}&lon={geo:lon?}&distance={geo:radius?}&bbox={geo:box?}&limit={count?}&page={startPag e?}quot;/> </OpenSearchDescription> http://maker.geocommons.com/search.xml The description document lets you specify multiple return formats.
  • 148. OpenSearch Response <feed xmlns:opensearch=quot;http://a9.com/-/spec/opensearch/1.1/quot; xmlns:georss=quot;http://www.georss.org/georssquot; xmlns=quot;http://www.w3.org/2005/Atomquot;> <title>Mapufacture Maps</title> <id>http://geocommons.com/maps</id> <opensearch:totalResults>96</opensearch:totalResults> <opensearch:startIndex>21</opensearch:startIndex> <opensearch:itemsPerPage>20</opensearch:itemsPerPage> <link type=quot;application/opensearchdescription+xmlquot; rel=quot;searchquot; href=quot;http://geocommons.com/geocommonssearch.xmlquot;/> ... </feed>
  • 149. Pagination <link type=quot;application/atom+xmlquot; rel=quot;firstquot; href=quot;http://geocommons.com/maps?limit=20&page=2quot;/> <link type=quot;application/atom+xmlquot; rel=quot;previousquot; href=quot;http://geocommons.com/maps?limit=20&page=1quot;/> <link type=quot;application/atom+xmlquot; rel=quot;nextquot; href=quot;http://geocommons.com/maps?limit=20&page=3quot;/> <link type=quot;application/atom+xmlquot; rel=quot;lastquot; href=quot;http://geocommons.com/maps?limit=20&page=5quot;/>
  • 150. Extensions • Referrer • Relevance • Suggestions • Geo • Time Multiple extensions - most pertinent here is the Geo extension.
  • 151. OpenSearch-Geo http://geocommons.com/search.atom? keyword={searchTerms}& location={geo:locationString?} http://www.opensearch.org/Specifications/OpenSearch/Extensions/Geo/1.0/Draft_1
  • 152. OpenSearch-Geo http://geocommons.com/search.atom? keyword={searchTerms}& location={geo:locationString?} http://geocommons.com/search.atom? keyword=pizza& location=Norcross,+Georgia http://www.opensearch.org/Specifications/OpenSearch/Extensions/Geo/1.0/Draft_1
  • 153. OpenSearch-Geo http://geocommons.com/search.atom? keyword={searchTerms}& lat={geo:lat?}&lon={geo:lon?}&distance={geo:radius ?}
  • 154. OpenSearch-Geo http://geocommons.com/search.atom? keyword={searchTerms}& lat={geo:lat?}&lon={geo:lon?}&distance={geo:radius ?} http://geocommons.com/search.atom? keyword=pizza& lat=43.25&lon=-123.45&distance=10000
  • 155. OpenSearch-Geo http://geocommons.com/search.atom? keyword={searchTerms}& bbox={geo:box?}
  • 156. OpenSearch-Geo http://geocommons.com/search.atom? keyword={searchTerms}& bbox={geo:box?} http://geocommons.com/search.atom? keyword=pizza& bbox=-111.032,42.943,-119.856,43.039
  • 157. OpenSearch-Geo http://geocommons.com/search.atom? keyword={searchTerms}& region={geo:polygon?}
  • 158. OpenSearch-Geo http://geocommons.com/search.atom? keyword={searchTerms}& region={geo:polygon?} http://geocommons.com/search.atom? keyword=pizza&polygon=45.256,-110.45,46.46,-109.48, 43.84,-109.86,45.256,-110.45
  • 159. OpenSearch-Geo http://geocommons.com/search.atom? keyword={searchTerms}& location={geo:locationString?}& lat={geo:lat?}&lon={geo:lon?}&distance={geo:radius ?}& bbox={geo:box?}
  • 160. Response <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <feed xmlns=quot;http://www.w3.org/2005/Atomquot; xmlns:opensearch=quot;http://a9.com/-/spec/opensearch/1.1/quot; xmlns:georss=quot;http://www.georss.org/georssquot;> ... <opensearch:Query role=quot;requestquot; searchTerms=quot;New York Historyquot; startPage=quot;3quot; geo:box=quot;-74.0667,40.69418,-73.9116,40.7722quot;/> <georss:box>40.69418 -74.0667 40.7722 -73.9116</ georss:box> ... </feed> unfortunately, query is (longitude, latitude) [WSEN] response is (latitude, longitude) [SWNE]
  • 161. Local Governments http://data.octo.dc.gov
  • 162. GeoNetwork + GeoServer GeoNetwork + GeoServer is a stack to host yourself.
  • 163. GeoNames http://geotree.geonames.org
  • 164. Storing Data So where do you go to store all this data?
  • 165. PostgreSQL + PostGIS internally? PostGIS - or maybe MySQL if you want to role your own solution
  • 166. Google MyMaps API Externally? Google has a beta MyMaps API for pushing markers into Google.
  • 167. GeoCommons Finder! http://geocommons.com GeoCommons is a public repository for publishing and searching datasets.
  • 168. ProgrammableWeb Look at upcoming API’s for other specific places to find geospatial data, and publish it.
  • 169. GeoWeb Thank you @ajturner @rabble http://highearthorbit.com/presentations/
  • 171. Atom <entry> <title>Election Precincts</title> <link type=quot;text/htmlquot; href=quot;http://finder.geocommons.com/overlays/1quot; rel=quot;alternatequot;/> <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot; rel=quot;alternatequot;/> <link type=quot;application/vnd.google-earth.kml+xmlquot; href=quot;http://finder.geocommons.com/overlays/ 1.kmlquot; rel=quot;alternatequot;/> <link type=quot;application/atom+xml;type=entryquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot; rel=quot;editquot;/> <id>http://finder.geocommons.com/overlays/1</id>local <updated>2009-05-18T15:35:55Z</updated> <contributor> <name>admin</name> <uri>http://finder.geocommons.com/users/admin</uri> </contributor> <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <author> <name>Michele Smith</name> </author> <georss:box></georss:box> <content type=quot;htmlquot;> </content> </entry>
  • 172. Atom Links <entry> <title>Election Precincts</title> <link type=quot;text/htmlquot; href=quot;http://finder.geocommons.com/overlays/1quot; rel=quot;alternatequot;/> <link type=quot;text/htmlquot; <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot; href=quot;http://finder.geocommons.com/overlays/index.htmlquot; rel=quot;alternatequot;/> rel=quot;alternatequot;/> <link type=quot;application/vnd.google-earth.kml+xmlquot; href=quot;http://finder.geocommons.com/overlays/ 1.kmlquot; rel=quot;alternatequot;/> <link type=quot;application/atom+xml;type=entryquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot; <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/index.atomquot; rel=quot;editquot;/> <id>http://finder.geocommons.com/overlays/1</id>local rel=quot;alternatequot;/> <updated>2009-05-18T15:35:55Z</updated> <link type=quot;application/vnd.google-earth.kml+xmlquot; <contributor> <name>admin</name> href=quot;http://finder.geocommons.com/overlays/index.kmlquot; <uri>http://finder.geocommons.com/users/admin</uri> rel=quot;alternatequot;/> </contributor> <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <author> <name>Michele Smith</name> </author> <georss:box></georss:box> <content type=quot;htmlquot;> </content> </entry> A way to embed attribute data with any placemark
  • 173. Atom Attribution <entry> <title>Election Precincts</title> <link type=quot;text/htmlquot; href=quot;http://finder.geocommons.com/overlays/1quot; rel=quot;alternatequot;/> <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot; rel=quot;alternatequot;/> <link type=quot;application/vnd.google-earth.kml+xmlquot; href=quot;http://finder.geocommons.com/overlays/ 1.kmlquot; rel=quot;alternatequot;/> <link type=quot;application/atom+xml;type=entryquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot; rel=quot;editquot;/> <id>http://finder.geocommons.com/overlays/1</id>local <updated>2009-05-18T15:35:55Z</updated> <contributor> <name>admin</name> <uri>http://finder.geocommons.com/users/admin</uri> </contributor> <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <author> <author> <name>Michele Smith</name> </author> <name>Michele Smith</name> <georss:box></georss:box> <content type=quot;htmlquot;> </author> </content> </entry> A way to embed attribute data with any placemark
  • 174. Atom Attribution <entry> <title>Election Precincts</title> <link type=quot;text/htmlquot; href=quot;http://finder.geocommons.com/overlays/1quot; rel=quot;alternatequot;/> <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot; rel=quot;alternatequot;/> <link type=quot;application/vnd.google-earth.kml+xmlquot; href=quot;http://finder.geocommons.com/overlays/ 1.kmlquot; rel=quot;alternatequot;/> <link type=quot;application/atom+xml;type=entryquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot; rel=quot;editquot;/> <id>http://finder.geocommons.com/overlays/1</id>local <contributor> <updated>2009-05-18T15:35:55Z</updated> <contributor> <name>admin</name> <name>admin</name> <uri>http://finder.geocommons.com/users/admin</uri> <uri>http://finder.geocommons.com/users/admin</uri> </contributor> </contributor> <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <author> <name>Michele Smith</name> </author> <georss:box></georss:box> <content type=quot;htmlquot;> </content> </entry> A way to embed attribute data with any placemark
  • 175. Atom Tags <entry> <title>Election Precincts</title> <link type=quot;text/htmlquot; href=quot;http://finder.geocommons.com/overlays/1quot; rel=quot;alternatequot;/> <link type=quot;application/atom+xmlquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot; rel=quot;alternatequot;/> <link type=quot;application/vnd.google-earth.kml+xmlquot; href=quot;http://finder.geocommons.com/overlays/ 1.kmlquot; rel=quot;alternatequot;/> <link type=quot;application/atom+xml;type=entryquot; href=quot;http://finder.geocommons.com/overlays/1.atomquot; rel=quot;editquot;/> <id>http://finder.geocommons.com/overlays/1</id>local <updated>2009-05-18T15:35:55Z</updated> <contributor> <name>admin</name> <uri>http://finder.geocommons.com/users/admin</uri> </contributor> <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <category term=quot;democracyquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <category term=quot;electionquot; scheme=quot;http://finder.geocommons.com/tagsquot;/> <author> <name>Michele Smith</name> </author> <georss:box></georss:box> <content type=quot;htmlquot;> </content> </entry> A way to embed attribute data with any placemark
  • 176. Conversion and Utilities http://www.flickr.com/photos/caravinagre/1364614919
  • 177. GPSBabel http://gpsbabel.org your swiss army knife convert from one to another
  • 178. GDAL/OGR http://gdal.org when you need a powersaw instead of a swiss army knife GDAL translates Raster data (97 formats) OGR translates Vector data (35 formats)
  • 179. GeoNames GeoRSS http://www.geonames.org/rss-to-georss-converter.html Converts RSS to GeoRSS there are many more.