<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sean Gillies (Posts about map)</title><link>https://sgillies.net/</link><description></description><atom:link href="https://sgillies.net/tags/map.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Sun, 31 Dec 2023 01:26:19 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Linking GeoJSON</title><link>https://sgillies.net/2013/10/08/linking-geojson.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;I've blogged a few times (
&lt;a class="reference external" href="http://sgillies.net/blog/888/openlayers-constrained-by-hypertext/"&gt;here&lt;/a&gt;
and &lt;a class="reference external" href="http://sgillies.net/blog/958/geojson-data-uris/"&gt;here&lt;/a&gt;) about a pattern
I've developed for mapping feature data associated with a web page.
Lyzi Diamond wrote a great post about this pattern a few weeks ago:
&lt;a class="reference external" href="http://lyzidiamond.com/posts/osgeo-august-meeting/"&gt;http://lyzidiamond.com/posts/osgeo-august-meeting/&lt;/a&gt;. I'm thrilled that it's
catching on a bit. The pattern is super simple, only three short paragraphs are
needed to describe it.&lt;/p&gt;
&lt;p&gt;Let's say I have a collection of web pages. Each is about a particular batch of
features. &lt;a class="reference external" href="http://sgillies.github.io/syriaca/"&gt;http://sgillies.github.io/syriaca/&lt;/a&gt;, for example, is a demo of a page
about Syriac places in antiquity. It bears a map in which the places are
rendered.&lt;/p&gt;
&lt;p&gt;The features to be rendered in the map are obtained by making an HTTP request
for a GeoJSON resource. In my case
&lt;a class="reference external" href="http://sgillies.github.io/syriaca/syriaca.json"&gt;http://sgillies.github.io/syriaca/syriaca.json&lt;/a&gt; is fetched using
jQuery.getJSON().&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-1" name="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-1" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-1"&gt;&lt;/a&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;L&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'map'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;a id="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-2" name="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-2" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-2"&gt;&lt;/a&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;geojson&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;L&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;geoJson&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;addTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;a id="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-3" name="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-3" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-4" name="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-4" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-4"&gt;&lt;/a&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getJSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;geojson_uri&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;a id="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-5" name="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-5" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;geojson&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;a id="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-6" name="rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-6" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_600b65a00e3b4d6ea3aaa0f44c23e564-6"&gt;&lt;/a&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The feature data is not written into a script in the page as
they are in &lt;a class="reference external" href="http://leafletjs.com/examples/quick-start-example.html"&gt;http://leafletjs.com/examples/quick-start-example.html&lt;/a&gt;. Yes,
this means an extra HTTP request, but one that can be ansynchronous and
cacheable.&lt;/p&gt;
&lt;p&gt;Here's the crux of the pattern: the URI of that GeoJSON resource bound to the
geojson_uri variable is specified not in the map script, but in a link in the
head of the page.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code html"&gt;&lt;a id="rest_code_74570743e1b34efe99deca20b9ea062b-1" name="rest_code_74570743e1b34efe99deca20b9ea062b-1" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_74570743e1b34efe99deca20b9ea062b-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"location"&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"application/json"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"syriaca.json"&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;That URI is found by its "location" relation type.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_84a4e6986b0c4611a8f4a527aeebc8e6-1" name="rest_code_84a4e6986b0c4611a8f4a527aeebc8e6-1" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_84a4e6986b0c4611a8f4a527aeebc8e6-1"&gt;&lt;/a&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;geojson_uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'link[rel="location"]'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"href"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;What's gained by having my Javascript follow a link to get GeoJSON features?
Why not just write the features into a script?  I've developed this pattern
because it decouples the map from the data and lets me generalize the mapping
script so I can reuse it across many pages, and also because I'm not thinking
just about the slippy maps in the page. I'm keeping the bigger web in mind.&lt;/p&gt;
&lt;p&gt;If the Javascript in my page was my only consideration I'd just embed the
features in a script and maybe not use GeoJSON at all. But a resource like
&lt;a class="reference external" href="http://sgillies.github.io/syriaca/"&gt;http://sgillies.github.io/syriaca/&lt;/a&gt; isn't just a page with a slippy map, it's
a starting point for other web map making software. The links are also for web
clients written by people other than me.&lt;/p&gt;
&lt;p&gt;Given the page's URL, a Python web client can get the same GeoJSON in the
same way.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-1" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-1" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-1"&gt;&lt;/a&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-2" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-2" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-2"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-3" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-3" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-4" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-4" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-4"&gt;&lt;/a&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'http://sgillies.github.io/syriaca/'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-5" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-5" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-5"&gt;&lt;/a&gt;&lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-6" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-6" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-6"&gt;&lt;/a&gt;&lt;span class="n"&gt;points&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'link'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s1"&gt;'location'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'rel'&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-7" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-7" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-7"&gt;&lt;/a&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;points&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-8" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-8" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-9" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-9" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-9"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Output:&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-10" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-10" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-10"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# [&amp;lt;link href="http://sgillies.github.io/syriaca/syriaca.json" rel="location"/&amp;gt;]&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-11" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-11" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-11"&gt;&lt;/a&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-12" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-12" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-12"&gt;&lt;/a&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-13" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-13" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-13"&gt;&lt;/a&gt;    &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'href'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-14" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-14" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-14"&gt;&lt;/a&gt;    &lt;span class="n"&gt;json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-15" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-15" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-15"&gt;&lt;/a&gt;    &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'type'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'features'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-16" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-16" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-16"&gt;&lt;/a&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-17" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-17" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-17"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Output:&lt;/span&gt;
&lt;a id="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-18" name="rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-18" href="https://sgillies.net/2013/10/08/linking-geojson.html#rest_code_fa0c4b50849a43399a7cf1f17cd2be1b-18"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# FeatureCollection 955&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The GeoJSON URI is much easier to find in a link by its relation type than
by scraping it from a script (were I to use a literal in my first code
example above instead of a geojson_uri variable). There's a IETF draft
written by James Snell proposing standardization of the "location" relation:
&lt;a class="reference external" href="http://tools.ietf.org/html/draft-snell-more-link-relations-01"&gt;http://tools.ietf.org/html/draft-snell-more-link-relations-01&lt;/a&gt;. My pattern
becomes much more useful with such a standard link relation.&lt;/p&gt;
&lt;p&gt;Does this pattern avoid the browser's same-origin policy as Lyzi suggests in
&lt;a class="reference external" href="http://lyzidiamond.com/posts/external-geojson-and-leaflet-the-other-way/"&gt;http://lyzidiamond.com/posts/external-geojson-and-leaflet-the-other-way/&lt;/a&gt;? As
far as I know, links with rel="stylesheet" are the only ones that a browser
fetches unprompted. The GeoJSON fetched by XHR is still subject to same-origin
policy.&lt;/p&gt;</description><category>geojson</category><category>html</category><category>http</category><category>javascript</category><category>leaflet</category><category>link</category><category>map</category><category>python</category><category>uri</category><category>web</category><category>work</category><guid>https://sgillies.net/2013/10/08/linking-geojson.html</guid><pubDate>Tue, 08 Oct 2013 06:00:00 GMT</pubDate></item></channel></rss>