GIS is a very fascinating topic, and the one I wish I had more specialized knowledge of. I was recently reading an article by Vladimir Agafonkin (author of Leaflet) on coming up with a better algorithm to find the visual center of a polygon. This lead me to look for articles and information on what is available on that topic in the Elm land. Unfortunately, not much. But let's see what there is and what is still missing. This week it's a special issue of Elm Bits about GIS.
Just last week I mentioned Ian Mackenzie and the 1.0.0 release of his 3D rendering engine for Elm. Ian is the most active person that works in the domains adjacent to GIS. Take a look at his Github. Here are a few:
- elm-geometry - package that provides geometric data types like points, vectors, arcs, spline curves and coordinate frames, and a set of functions to work with them.
- elm-triangular-mesh - library that helps you create and manipulate indexed triangular meshes
- elm-iso-10303 - helpers to encode data in ISO 10303 format
A while ago Ian was on the Elm Town podcast, episode 49 where he talked about his work, how he got into Elm, packages he created, and many other things.
When we talk about maps, probably the first few that come to mind are Google Maps, and Open Street Map. A lot of folks have also heard about Mapbox. There is
gampleman/elm-mapbox that allows you to use MapboxGl (via ports) from Elm. And of course you can embed Google Maps in your app via
PaackEng/elm-google-maps. If you're new to Elm and ports, there is a nice and simple article by Moremi Vannak that explains how to embed Google maps into your website through ports. Combine it with
billstclair/elm-geolocation and you will be able to show approximate user's location on the map.
During the Elm-Conf 2017 Jonas Coch gave a talk on building interactive maps in Elm. How do you add markers, how to create layers, use ports, display heat maps, and use GeoJSON. It's a short talk worth watching:
While looking at the information available on this topic, I stumbled upon
etaque/elm-hexagons both of which implement hexagonal grids. If you're like me and never heard of these, it's a grid built of hexagons (well, obviously):
You can navigate within this grid using coordinates, calculate distances, paths, neighbours. Essentially this is a map. Hexagonal grids are used in some games, e.g. for building a terrain. Or board games like settlers of Catan. Amit Patel has an in-depth explanation of the concept and how to transform and navigate through the hexagonal space along with a list of other types of grids.
For working with various units, there's a package from Ian Mackenzie called elm-units which contains not only GIS-related units, but lots of others too, e.g. lumens for light, moles for sunstance concentration, joules and newtons for energy, and many more. Max Goldstein has built a parser for GeoJSON to make it easy to import this data and render on map. For data types like bounding box, points, and a handful of others, Jakub Hampl has created elm-geospatial.
Jakub is the person behind the amazing gampleman/elm-visualization (and elm-mapbox mentioned above). He gave a talk about geospatial analysis on Elm Europe last year:
And to finish off this issue with a great quote from Barack Obama:
The study of geography is about more than just memorizing places on a map. It's about understanding the complexity of our world.