Posts Tagged ‘maps’

The Changing Map Of Europe’s Boundaries

The boundaries of Europe’s constituent countries have changed a lot in my lifetime. Some countries don’t exist anymore whilst others have come into existence. But it takes a map visualisation to make you realise just how much the map of Europe has changed.

Actually, it takes two map visualisations. The first, courtesy of the BBC, dates from 2005 and covers the years between 1900 and 1994. Starting wit Imperial Europe and fast forwarding though two world wars, plus the Cold War and taking in the collapse of the Communist Bloc and the expansion of the European Union.

BBC Map

The other map takes a much wider view, ranging from 1000 AD to the present day. It’s oddly fascinating to watch the Holy Roman and Byzantine Empires go from dominance to vanishing entirely.

LiveLeak Map

But the purist in me finds as much to dislike as to like in both of these maps. The BBC one is just two small and cries out for the ability to pan and zoom the map. For some unexplained reason, the map is … tiny and, though I hesitate to use the word in this content, the cartographer has obviously been experimenting with differing shades of colour to try and clearly delineate the countries but didn’t experiment hard enough.

The LiveLeak map is also small and while the video containing the map can be enlarged to full screen, there’s a loss of crispness to the map. For a map with such a wide timespan, it would have helped massively to have some kind of timeline accompanying the animation, so you can see just where in history you are.

Two maps. Both interesting. Both, for me, ultimately flawed. This sort of map just cries out to be reworked. If only I could find a suitable boundary data set spanning over a thousand years.

Written and posted from BA Galleries First Lounge, Heathrow Terminal 5 (51.47017, -0.48711)

Countries That Cry; Countries That Don’t (100% Mercator Free)

March the 5th 2013 marked the 501st birthday of Gerardus Mercator, whose map projection appears on virtually every web map you’ll find on the interwebs today. It appears he’s none too happy about the lack of royalties on this and so I felt compelled to use a projection for my next map which wasn’t Mercator’s.

mercator-tweet

I’ve been using a lot of Natural Earth‘s vector data to make maps recently and so Tom Patterson‘s rather beautiful Natural Earth projection seemed fitting and avoided the wrath of Gerardus into the bargain.

crying-countries

Continuing my dabblings in Mike Bostock’s D3, reworking the Countries That Do And Don’t Cry For Me map that did the rounds on the internet some years back took up a couple of spare hours last night; making maps is addictive it seems.

The full map is here, hosted on maps.geotastic.org … and for those who don’t get the cultural reference, this song from a certain 1970′s musical might help.

Written and posted from home (51.427051, -0.333344)

The Great British Map; Or Great Britain vs. The United Kingdom vs. The British Isles

Last night I made another map. It tries to answer some of more perplexing and confusing facets of the geography surrounding the world’s 9th largest island. I mean of course Great Britain. No, wait. I mean the United Kingdom. No, wait. I mean Britain. Or do I mean England? See, it’s confusing.

  • So if the ISO 3166-2 code is GBR, how come the country is called the United Kingdom?
  • But if England is a country and the United Kingdom is a country, how come England is part of the United Kingdom?
  • What about Scotland, Wales and Northern Ireland?

This isn’t the first time I’ve covered this topic. The first time was for a post on the now defunct Yahoo! Geo Technologies blog entitled UK Addressing, The Non Golden Rules Of Geo Or Help! My Country Doesn’t Exist. The ygeoblog.com domain is now long gone and redirects to the Yahoo! corporate blog but I was able to reproduce this post here and it’s also captured in the Internet Archive’s WayBackMachine. The second time was when I made a variation of The Great British Venn Diagram. But this is the first time (though probably not the last) that I’ve used a map, which is odd as this is something that’s tailor-made for a map.

I’d been looking for a good source of geographic vector data that I could use to easily overlay polygons on a map and came across a rich source of free vector and raster map data from Natural Earth. But instead of overlaying that data on top of a standard slippy map using a JavaScript maps API to tap into a tile server’s bitmap tiles, I soon wondered whether I could actually make a map from the vector data. It turned out I could and decided to revisit the structure of the group of islands I live on one more time and try to visualise the difference between Great Britain, the United Kingdom and the British Isles. The end result, punningly entitled the Great British Map, looks something like this …

Great British Map

When the page first loads you’ll see the coastlines of Britain, Ireland and towards the bottom, the Channel Islands. There’s then five ways of looking at this particular map.

There’s the group of geographic islands that’s termed the British Isles; these show up in purplish-grey and if you’re observant, the Channel Islands vanish as they’re not part of this island group.

Great British Map - Great Britain

Then there’s the individual geographic islands of Great Britain, Ireland, the Isle Of Man and The Channel Islands; these show up in green.

Great British Map - United Kingdom

There’s two sovereign states, The United Kingdom of Great Britain And Northern Island and the Republic Of Ireland; these show up in red.

Great British Map - England

Next comes the administrative countries which make up the United Kingdom; England, Scotland, Wales and Northern Ireland. These show up in yellow.

Great British Map - Crown Dependencies

Finally, there’s the Crown Dependencies, the self governing possessions of the British Crown; the Isle of Man and the Channel Islands are these and they show up as purple.

What’s missing from the map? The British Overseas Territories, which is a polite way of saying what’s left of the British Empire that didn’t gain independence and which the United Kingdom still asserts sovereignty over. These are Anguilla, Bermuda, British Antarctic Territory, British Indian Ocean Territory, British Virgin Islands, Cayman Islands, Falkland Islands, Gibraltar, Montserrat, Pitcairn Islands, St. Helena, Ascension Island, Tristan da Cunha, the Sovereign Base Areas of Akrotiri and Dhekalia and the Turks and Caicos Islands.

If you’re interested in how I actually made the map, read on.

The source data from the map are two public domain datasets from Natural Earth; the 1:10m map Admin 0 Subunits dataset and the 1:10m Populated Places dataset. This data includes shapefiles which can be converted into GeoJSON format by the GDAL ogr2ogr command line tool. I extracted the vectors for the UK, Ireland, Isle of Man and Channel Islands from the Admin 0 Subunits dataset, keying on their ISO 3166-1 Alpha-3 country codes.

$ ogr2ogr -f GeoJSON -where "adm0_a3 IN ('GBR','IRL','IMN','GGY','JEY','GBA')" subunits.json ne_10m_admin_0_map_subunits/ne_10m_admin_0_map_subunits.shp

I then extracted the place data from the Populated Places dataset, again extracting data for the UK, Ireland, Isle of Man and Channel Islands, this time keying on their ISO 3166-1 Alpha-2 country codes. Not entirely sure why one dataset uses Alpha-2 and the other uses Alpha-3 but go figure; the data is free, accurate and open so who am I to complain?

$ ogr2ogr -f GeoJSON -where "iso_a2 IN ('GB','IM','JE','GG') AND SCALERANK < 8" places.json ne_10m_populated_places/ne_10m_populated_places.shp

Finally, I merged subunits.json and places.json into a single TopoJSON file, with the added bonus that TopoJSON is much much smaller than GeoJSON. The source GeoJSON weighed in at 549 KB whereas the combined TopoJSON is a mere 78 KB.

$ topojson --id-property su_a3 -p NAME=name -p name -o great-british-map.json subunits.json places.json

The main reason for use of TopoJSON is not that it’s much more lightweight than GeoJSON, but that Mike Bostock’s excellent D3 JavaScript library can easily slurp in TopoJSON and inject SVG straight into an HTML document. Which is precisely what the map’s underlying code does. There’s a lot more that D3 could do with this map, but it’s early days and for a first step into a new maps library, I’m pretty happy with how it’s turned out.

Speaking of code, it should come as no surprise that the map’s code base is available on GitHub. The Great British Map is based on great D3 tutorial that Mike has written on vector mapping using Natural Earth, so the similarity between Mike’s map and my map is entirely intentional.

Written and posted from home (51.427051, -0.333344)

The Ubiquitous Digital Map (Abridged)

A lot of great conferences in the UK happen in London. But not all great conferences. For some, you have to travel a little further afield. Maybe to East Anglia. Or more specifically to Norwich, the county town of Norfolk. If you were in Norwich last week, you might have noticed that SyncConf was taking place and I’d been asked by ex-MultiMapper and co-founder of SyncConf, John Fagan to do a talk on something related to maps. How could I refuse?

3347163776

SyncConf isn’t a maps conference or a geo conference; it’s a tech conference for the city’s tech and startup community. So it seemed to make sense not to go full-on maps nerd for the conference audience but instead look at how we got to the current state of play where the digital map has become ubiquitous. It also allowed me to the opportunity to put a little bit of map porn into a slide deck.

This is how it turned out .. my slide deck and notes follow after the break.

Image Credits: Denise Bradley, Eastern Daily Press.
Written and posted from home (51.427051, -0.333344)

Read On…

The Internet Seems To Like The Combination Of Maps And Innuendo

Oh people of the interwebs; you are indeed a wondrous thing. If you build something and put it up on the internet, you’ve no expectation that anyone will see it, let alone look at it. But it appears that the combination of innuendo and some vaguely sounding rude place names (actually with some very rude place names) seems to be something that the citizens of the internet actually like.

The map hit the internet at maps.geotastic.org/rude/ around lunchtime on the 6th. of February; since then, several things have happened.

Firstly, Eric Rodenbeck, the CEO of Stamen Design, whose map tiles I used on the Rude Map, dropped me an email to say he liked it. I’m a massive fan of the cartography that Stamen produces and this would, alone, be enough to make the making of the map worthwhile.

But then, the URL of the site started proliferating over Twitter … including Jonathan Crowe, author of the late and utterly lamented Map Room blog.

Then the map started to get written about. Firstly by The Independent, then by Laughing Squid, Blame It On The Voices, Reddit and io9.

Rude Places Map - The Independent

And it keeps on getting mentions on Twitter, on Google+ and other social networks. According to the server logs, the map’s been viewed a staggering (to me at least) 53,000 times; this definitely classes as a first for me. So with tongue firmly in cheek and innuendo firmly in mind, it seems that if you build it, they will come can be the case sometimes.

All of which, makes me wonder … what should I build a map of next?

Written and posted from home (51.427051, -0.333344)

Ooh That Sounds Rude; Mapping British Innuendo

No-one can really define what being British is, though many have tried. One thing that lots of people do seem to agree on is that part of being British is a love for and an appreciation of the British sense of humour. This can be roughly and with a sweeping generalisation said to consist of equal parts of finding fun in everyday situations Peep Show), satire and parody (Have I Got News For You), social awkwardness (The Office), surrealism and nonsense (Monty Python) and innuendo (the Carry On films).

Focus on that trait of innuendo for a moment. Could you possibly combine the British fondness for innuendo with geography and put it on a map? It turns out you can. So I did. It may be vaguely NSFW but there’s real geographical data behind this.

Rude Places Map

Maybe it’s part of bring British, but an airport whose code is BUM is just … funny.

As a classic Web 2.0 style maps mashup, this is never going to win any awards for originality or innovativeness. But the source of each of these vaguely rude sounding names was from Yahoo’s WOE data set, before the data was released via the GeoPlanet API and (currently offline) GeoPlanet Data download. A list of real but amusing sounding place names, culled from GeoPlanet by one of the old Yahoo! Geo team, has been sitting in a file on one of my backup drives for too many years now. But given a geographic data set. Stamen’s wonderful Toner map tiles and a JavaScript maps API, in this case Leaflet, the temptation to make a map out of it all was just too strong.

Yes it’s a map, yes it’s geographical innuendo and yes, it’s very much part of the British sense of humour. If you’re British, try not to snigger too much; if you’re not British, just shake your head sadly and mutter “those crazy Brits”.

Written and posted from home (51.427051, -0.333344)

I Was A Map Nerd As A Child

In October of 2012, whilst sorting through my father’s personal effects, I was proud to find that I wasn’t the first map nerd in the family and that maps seemed to mean as much to my Dad as they do to me.

Lumped in with my father’s posessions were also some things from my childhood which my parents had kept, either for sentimental reasons or in the hope that one day, I might have children who might want some of my toys, books and games.

At the weekend, I had another clear out and came across some jigsaws I had when I was around 8 or so years old.

8440178739_e0f98e011f_b

Maps jigsaws from the early 1970′s of Australia, the US, India and the UK; maybe I was a map nerd even as a child and just didn’t know it then.

Written and posted from the Geo-spatial Building, Nottingham University (52.95183, -1.18435)

The Greenland Problem And Playing With Mercator’s Map

It seems that writing about map projections is a little bit like waiting for one of London’s iconic red buses; you write one and immediately another one comes along. As I mentioned in my last post, rightly or wrongly, the most commonly used map projection is the Mercator projection. It’s not without it’s problems or detractors.

A Mercator map gets more distorted the further north or south of the Equator you move. This is often referred to as The Greenland Problem. Greenland has an area of roughly 0.8 million square miles. Africa on the other hand has an area of roughly 11.6 million square miles. So on the map Africa should be roughly ten times the size of Greenland. Right?

But on a Mercator map it doesn’t appear so; both Greenland and Africa look to be approximately the same size; and don’t even get me started on how Antarctica is now smeared across the bottom of the map.

The Mercator Projection

A really effective way to show this distortion in action is the Mercator Puzzle by Luke Mahe of the Google Maps Developer Relations Team. Drag and drop the red shapes, which represent countries, around the map; watch them shrink as you near the Equator and expand and distort as you move towards the poles.

The Mercator Puzzle

It’s a nice geographical puzzle and an equally nice way of showing Mercator in action; how many of the 15 countries did you manage to find their correct homes for? If you’re really stuck, there’s a solution here; but no peeking unless you really get stuck!

Picture Credits: Mercator Map Wikimedia Commons, CC-BY-SA 3.0.
Written and posted from home (51.427051, -0.333344)

People Who Care About Map Projections … And People Who Don’t

Whenever you look at a map, be it on the web, on your mobile or on your wall there’s a compromise. The compromise is the map’s projection. Or to put it another way, the way in which the roughly spherical lump of rock we live on can be unwrapped and displayed in a flat, two dimensional manner.

There’s lots of way of doing this and the ways come with wonderful, almost eccentric sounding names. There’s the pseudo-cylindrical projections; Sanson-Flamsteed, Luximuthal or Kavrayskiy’s Fifth Projection (no idea what happened to the first four). There’s the conic projections; Lambert’s Conformal or War Office Polyconic. There’s the pseudo-conic projections; Stabius-Werner and Bonne. Or there’s the modified azimuthal projections; Wiechel’s or Winkel’s Tripel Projection.

There’s just so many ways of projecting the Earth onto a map. But there’s also the one we’re all familiar with. It’s Gerardus Mercator’s Projection and we’ve been using it, probably without knowing it, since 1569 and it’s showing no sign of going away.

So in the end, it all boils down to this …

Web Maps Projections

… which group are you in?

Cartotastic image fun by Tobin Bradley at Fuzzy Tolerance thanks to CC-BY-SA.
Written and posted from home (51.427051, -0.333344)

Making PostgreSQL, PostGIS And A Mac Play Nicely Together

Most things in life are a journey and the destination of this particular journey was to try and create a custom map style that represented the unique features and challenges of Tandale.

Which meant I needed to download and install TileMill, an interactive map design tool.

Which meant I needed to learn Carto, the CSS-like language for map styling.

Which meant I looked for a template project so I didn’t have to start from scratch.

Which meant I found OSM Bright.

Which meant I needed to start small and find a map extract of Tanzania to work with.

Which meant I needed to install and configure PostgreSQL and PostGIS on my Mac.

Which brings me to the starting point of the journey and the reason for this post in the first place.

When I normally need to install UNIX-y command line and server tools I turn to Homebrew, the tool set that “installs the stuff you need that Apple didn’t”. Homebrew supports installing both PostgreSQL and PostGIS but a bit of background research showed that installing these on Lion and on Mountain Lion could be problematic. A bit of further research soon turned up Postgres.app, which claims to be “the easiest way to run PostgreSQL on the Mac”. Postgres.app is a single shot installer which wraps PostgreSQL and PostGIS into an easy to install and run self contained environment.

Postgres.app

I’m a big fan of this approach to a software development environment. All of the stuff I’ve put up on GitHub and on WordPress.org has been written using MAMP, the single shot installer which wraps up Apache, MySQL and PHP on the Mac so Postgres.app gave instant appeal to me. So, download, install, start.

Next I found an OSM map extract of Tanzania courtesy of GeoFabrik, which I also downloaded. Now to load the map into PostgreSQL. I made sure my shell’s PATH pointed to the command line tools provided by Postgres.app by prepending /Applications/Postgres.app/Contents/MacOS/bin to the PATH defined in my .bash_profile, ran psql and created a database called tanzania. So far so good.

$ psql
psql (9.2.2)
Type "help" for help.

gary=# CREATE DATABASE tanzania;
CREATE DATABASE
gary=# \q

To load the map into the database I had a choice of two command line tools; Imposm or osm2pgsql. The latter of the two seemed to work out of the box according to the documentation so I used Homebrew to install this tool.

$ brew install osm2pgsql

Now to load the map …

$ osm2pgsql -c -G -U gary -d tanzania ~/Projects/maps/data/tanzania.osm.pbf 
osm2pgsql SVN version 0.81.0 (64bit id space)

Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
NOTICE:  table "planet_osm_point" does not exist, skipping
NOTICE:  table "planet_osm_point_tmp" does not exist, skipping
SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, 'POINT', 2 );
 failed: ERROR:  function addgeometrycolumn(unknown, unknown, integer, unknown, integer) does not exist
LINE 1: SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, ...
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

Error occurred, cleaning up

The lack of the AddGeometryColumn function was the clue here. Whilst Postgres.app may come with PostGIS, my custom database was lacking all the PostGIS functionality. So I deleted my initial database and tried to recreate it with the template_postgis template, which also failed.

$ psql
psql (9.2.2)
Type "help" for help.

gary=# DROP DATABASE tanzania;
DROP DATABASE
gary=# CREATE DATABASE tanzania TEMPLATE=template_postgis;
ERROR:  template database "template_postgis" does not exist
gary=# \q

Updated 24.12.12

As Regina correctly pointed out in the comments, I didn’t really need to go through the manual process of loading the PostGIS template, the create extension postgis command in psql would have done this for me much quicker and elegantly, reducing the commands to setup my database to just two statements …

$ psql
psql (9.2.2)
Type "help" for help.

gary=# CREATE DATABASE tanzania;
CREATE DATABASE
gary=# \connect tanzania;
You are now connected to database "tanzania" as user "gary".
tanzania=# CREATE EXTENSION postgis;
CREATE EXTENSION
gary=# \q

… simple when you know how.

So I needed to create the template_postgis database from scratch, loading in the postgis.sql and spatial_ref_sys.sql SQL files and then recreate my custom database, based on the template contained in the template_postgis database. The PostGIS SQL files are supplied as part of Postgres.app, if you know where to look for them; you’ll find them inside the app’s container in /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0.

$ createdb template_postgis
$ createlang plpgsql template_postgis
createlang: language "plpgsql" is already installed in database "template_postgis"
$ psql -d template_postgis -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/postgis.sql 
SET
BEGIN
CREATE FUNCTION
CREATE FUNCTION
CREATE TYPE
...
COMMIT

$ psql -d template_postgis -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/spatial_ref_sys.sql 
BEGIN
INSERT 0 1
...
COMMIT
ANALYZE

$ psql
psql (9.2.2)
Type "help" for help.

gary=# CREATE DATABASE tanzania TEMPLATE=template_postgis;
CREATE DATABASE
gary=# \q

Now, at last, I was able to load my Tanzanian map.

$ osm2pgsql -c -G -U gary -d tanzania ~/Projects/maps/data/tanzania.osm.pbf
osm2pgsql SVN version 0.81.0 (64bit id space)

Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
NOTICE:  table "planet_osm_point" does not exist, skipping
NOTICE:  table "planet_osm_point_tmp" does not exist, skipping
Setting up table: planet_osm_line
NOTICE:  table "planet_osm_line" does not exist, skipping
NOTICE:  table "planet_osm_line_tmp" does not exist, skipping
Setting up table: planet_osm_polygon
NOTICE:  table "planet_osm_polygon" does not exist, skipping
NOTICE:  table "planet_osm_polygon_tmp" does not exist, skipping
Setting up table: planet_osm_roads
NOTICE:  table "planet_osm_roads" does not exist, skipping
NOTICE:  table "planet_osm_roads_tmp" does not exist, skipping
Allocating memory for dense node cache
Allocating dense node cache in one big chunk
Allocating memory for sparse node cache
Sharing dense sparse
Node-cache: cache=800MB, maxblocks=102401*8192, allocation method=3
Mid: Ram, scale=100

Reading in file: /Users/gary/Projects/maps/data/tanzania.osm.pbf
Processing: Node(6820k 682.0k/s) Way(980k 16.90k/s) Relation(23580 1122.86/s)  parse time: 89s

Node stats: total(6820388), max(1910954191) in 10s
Way stats: total(980191), max(180648305) in 58s
Relation stats: total(23580), max(2409445) in 21s
Committing transaction for planet_osm_point
Committing transaction for planet_osm_line
Committing transaction for planet_osm_polygon
Committing transaction for planet_osm_roads

Writing way (980k)
Committing transaction for planet_osm_point
Committing transaction for planet_osm_line
Committing transaction for planet_osm_polygon
Committing transaction for planet_osm_roads

Writing relation (23569)
Sorting data and creating indexes for planet_osm_point
Sorting data and creating indexes for planet_osm_line
Sorting data and creating indexes for planet_osm_polygon
node cache: stored: 6820388(100.00%), storage efficiency: 50.68% (dense blocks: 637, sparse nodes: 6403164), hit rate: 99.45%
Sorting data and creating indexes for planet_osm_roads
Analyzing planet_osm_point finished
Analyzing planet_osm_polygon finished
Analyzing planet_osm_roads finished
Analyzing planet_osm_line finished
Copying planet_osm_point to cluster by geometry finished
Copying planet_osm_roads to cluster by geometry finished
Creating indexes on  planet_osm_roads finished
All indexes on  planet_osm_roads created  in 12s
Completed planet_osm_roads
Copying planet_osm_polygon to cluster by geometry finished
Copying planet_osm_line to cluster by geometry finished
Creating indexes on  planet_osm_point finished
All indexes on  planet_osm_point created  in 21s
Completed planet_osm_point
Creating indexes on  planet_osm_polygon finished
All indexes on  planet_osm_polygon created  in 28s
Completed planet_osm_polygon
Creating indexes on  planet_osm_line finished
All indexes on  planet_osm_line created  in 30s
Completed planet_osm_line

Osm2pgsql took 218s overall

One final gotcha awaited though. Restarting Postgres.app later that day made psql fail with an error.

$ psql
psql: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Although Postgres.app was running, it looked like the server wasn’t. Checking the system error logs via Console.app showed me that my newly populated database was running out of shared memory.

22/12/2012 11:05:44.319 com.heroku.postgres-service: FATAL:  could not create shared memory segment: Cannot allocate memory
22/12/2012 11:05:44.319 com.heroku.postgres-service: DETAIL:  Failed system call was shmget(key=5432001, size=3809280, 03600).
22/12/2012 11:05:44.319 com.heroku.postgres-service: HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space, or exceeded your kernel's SHMALL parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMALL.  To reduce the request size (currently 3809280 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
22/12/2012 11:05:44.319 com.heroku.postgres-service: 	The PostgreSQL documentation contains more information about shared memory configuration.
22/12/2012 11:20:40.584 com.heroku.postgres-service: server starting

Thankfully this is a known problem; PostgreSQL is really a server application, not a laptop application. The default Mac configuration isn’t enough to support a medium sized PostgreSQL database, but adding the following configuration settings to /etc/sysctl.conf, creating it via sudo if it doesn’t already exist and rebooting solved that final problem.

kern.sysv.shmmax=1610612736
kern.sysv.shmall=393216
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.maxprocperuid=512
kern.maxproc=2048

TileMill - Tanzania

I now have a working PostgreSQL and PostGIS install, with a map loaded, which TileMill can access. Now all I need to do is learn Carto and actually make the map I originally set out to do … another learning journey has started.

Written and posted from home (51.427051, -0.333344)