Background Image of a River

Blog

Finding Perpendicular lines with TurfJS

Bearing, LineIntersect & Destination

In a recent project I needed to determine the perpendicular distance from a single point (C) to a line created by two other points (A and B). Nor...

H3 Grids Explorer

A Web Tool for Exoploring H3 Grid Levels

What are H3 grids? Created by Uber Engineering, the H3 grid system divides the Earth’s surface into a hierarchical...

Export GeoJSON from PostgreSQL using Beekeeper Studio

Query > Download > Copy > Paste!

Update 2024-01-05: Added steps for saving a geojson file from pgAdmin....

FOSS4G Image Processing

Creating Cloud Optimized GeoTIFFs and Raster Tiles using GDAL and QGIS

This is a talk I gave at the 2021 Ohio GIS Conference. It outlines an open source pipeline for creating Cloud Optimized GeoTIFFs and raster tiles f...

Generating Cloud Optimized GeoTIFFs and Raster Tiles with GDAL

TL;DR gdalbuildvrt, gdal_translate, gdal_warp and gdaladdo

...

From the Ashes of Shapefiles

A Presentation for the 2020 Virtual Ohio GIS Conference

This talk describes the slow and painful migration from a legacy GIS data structure of hundreds of shapefiles to a modern setup using a mix of Post...

GIS and Remote Work

An Exploration of a GIS Remote Work Toolkit

In the aftermath of the Coronavirus pandemic, remote work may well be come the new normal, as businesses and government agencies discover that prod...

Exporting AGOL Feature Services to GeoJSON

Using NodeJS and Batches to Transform an ArcGIS Online Feature Service to GeoJSON

Update 2023-09-19: I added support for decoding domain values and npx - so you can run the tool straight from the command line. Here’s a ...

Ohio COVID-19 Dashboard

A Simple, Client Side Tracking Dashboard for COVID-19 in Ohio

Update: This visualization is no longer being updated. There are a wide variety of authoritative COVID-19 trackers on the internet, including o...

RTK to WGS84

Transforming Coordinates with JavaScript using proj4.js

In my day job we recently completed a project to field locate our water utility assets using a high-accuracy GPS unit. Now that this data is online...

Highlighting Features in Mapbox GL JS

A Comparison of Filter and Feature-State

Creating a hover effect is a great way to add interactivity to web maps. In mapbox-gl there are two main methods to accomplish this feature: ...

Network Tracing with Turf JS

A Client Side Solution for Simple Upstream and Downstream Linear Network Analysis

A primary focus of my day job is managing utility datasets for a small municipality. I am currently in the process of taking a simple database of l...

Progressive Web Apps

Using PWA Components for Web Maps

The GitHub repository with all the code needed to follow along with this presentation can be found at ...

Open Parcel Viewer

A Client-Side Parcel Viewer built with Leaflet

The Open Parcel Viewer is a client-side application written in plain javascript and jquery. It is capable of rendering up to 50k polygons on deskto...

Leaflet Store Locator

A Leaflet Version of the Original Mapbox JS Store Locator Example

This simple, responsive store locator is based on the original Mapbox JS exampl...

Intro to Turf JS

Geospatial Analysis for the Browser, Desktop & Server

This presentation was given at the 2018 Ohio GIS Conference. The NodeJS example is hard-coded from a real-world example in the original presentatio...

Mapping with Vector Tiles

Query Features Outside the Viewport

The goal of my original post on client-side web mapping for large datasets was ...

Web Maps from Scratch

An Introduction to Leaflet, GitHub & Jekyll

...

What is a Map?

Marshall Univerity 2016 GIS Day Keynote

...

Beyond the Desktop

Open Source Experiments in Web Mapping

...

Jekyll, Leaflet and TurfJS

Open Source Tools for Web Mapping

This presentation was given at the Northeast Ohio GIS Sympoisum on August 25, 2016. The primary objective was to give an overview of using ...

Leaflet & GeoJson Tiles

A County Parcel App: No GIS Server? No Problem!

Update 2017-08-01 This app has seen two more iterations. These each utilize an mbtiles-server to host the vector tiles, but still use client-si...

CartoDB Visualizations

One Data Set Four Ways

The maps above use the same data set, visualized using four different map types in the CartoDB web interface...

A Modern Leaflet Toolbar

Horizontal Toolbars in Leaflet

This is my take on a more modern looking leaflet toolbar/ui. With leaflet-search as t...

Conkle's Hollow Fall Hike

Mapping GPS Tracks with Leaflet

One of the benefits of using the open source Leaflet mapping library is the wide variety of available community supported plugins. This simple map ...

Intro to Leaflet

A Presentation for the 2015 Ohio GIS Conference

...

Leaflet Photo Map

A Trip Out West circa 1985

Update: This map originally used Google’s Picasa Web API, but this will soon be shut down...

Google MyMaps, Leaflet and ArcGIS Online

This is a quick look at Leaflet, Google MyMaps and Esri’s ArcGIS Online....

Hosting a GeoJson on GitHub

GitHub will host and preview your geojson files! Geomusings gives a...

Google Drive Fusion Tables

Update: Google has deprecated Google Fusion Tables....

Raster Catalogs

Here I explain how to create a raster catalog in order to have a mosaic of a set of images. This way you can always add or change the images instea...

Desktop to the Cloud: GIS Cloud and Rasters

One of the clients I work with utilizes unmanaged raster catalogs as part of their work flow. We manage over 20 raster catalogs with close to 4gb o...

Animating Urban Growth via the ArcMap Time Slider

One Hundred Years of Urban Growth in Ten Seconds

This video shows the growth of urban infrastructure from 1850 (blue) through to the present (red). I utilized the time/timeslider/export video feat...

Use Only Selected Features in Model Builder

This little trick came from GIS stack exchange. To run a model using only selected features, open your model and in the model builder window right ...