Importing INE Shapefiles into a Spatialite Database

In this post, we’ll walk through the process of importing Mexico’s National Electoral Institute (INE) shapefiles into a Spatialite database. We’ll be using macOS and QGIS for this tutorial. Setting Up Spatialite First, let’s install Spatialite using Homebrew: brew install spatialite-tools Once installed, create a new Spatialite database by running: spatialite ine.db You should see output indicating the Spatialite version and supported extensions. SpatiaLite version ..: 5.1.0 Supported Extensions: - 'VirtualShape' [direct Shapefile access] - 'VirtualDbf' [direct DBF access] - 'VirtualText' [direct CSV/TXT access] - 'VirtualGeoJSON' [direct GeoJSON access] - 'VirtualXL' [direct XLS access] - 'VirtualNetwork' [Dijkstra shortest path - obsolete] - 'RTree' [Spatial Index - R*Tree] - 'MbrCache' [Spatial Index - MBR cache] - 'VirtualFDO' [FDO-OGR interoperability] - 'VirtualBBox' [BoundingBox tables] - 'VirtualSpatialIndex' [R*Tree metahandler] - 'VirtualElementary' [ElemGeoms metahandler] - 'VirtualRouting' [Dijkstra shortest path - advanced] - 'VirtualKNN2' [K-Nearest Neighbors metahandler] - 'VirtualGPKG' [OGC GeoPackage interoperability] - 'VirtualXPath' [XML Path Language - XPath] - 'SpatiaLite' [Spatial SQL - OGC] PROJ version ....

How to Use GORM and Golang Migrate.

Introduction This guide demonstrates how to set up and use GORM with Golang Migrate to manage your PostgreSQL database. Follow along to see the code in action and get your environment running. Prerequisites Go installed on your system. Docker installed and running. Project Structure Here is the final directory structure: . ├── .env ├── Makefile ├── cmd │ └── cli │ └── main.go ├── docker-compose.yml ├── go.mod ├── go.sum └── internal ├── db │ └── migrations │ ├── 20240608192206_create_users_table....

Convert node package with Typescript and Rollup

I already had a library that I wanted to convert to Typescript. I picked Rollup.js to do my build process. First I installed the following packages: > npm i -E -D rollup typescript @rollup/plugin-commonjs\ @rollup/plugin-node-resolve rollup-plugin-typescript2\ rollup-plugin-peer-deps-external I ended up with: * [email protected] * [email protected] * [email protected] * [email protected] * @rollup/[email protected] * @rollup/[email protected] Then I created a tsconfig.json: { "compilerOptions": { "outDir": "build", "module": "esnext", "target": "es5", "lib": ["es6", "dom", "es2016", "es2017"], "sourceMap": true, "allowJs": false, "declaration": true, "moduleResolution": "node", "forceConsistentCasingInFileNames": true, "noImplicitReturns": true, "noImplicitThis": true, "noImplicitAny": true, "strictNullChecks": true, "suppressImplicitAnyIndexErrors": true, "noUnusedLocals": true, "noUnusedParameters": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true }, "include": ["src"], "exclude": ["node_modules", "build"] } Also a rollup....

May 30, 2020 · 2 min · Hector Yeomans

Golang and interfaces misuse

One of my favorite things about Golang is the concept of interface. It’s also one of my grievances every time I see them used as C#/Java interfaces. It’s typical to see a colossal interface defined at a package level file, for example, a package that defines CRUD operations for a User. package db import "context" // User -- type User struct { ID int Email string } // UsersDb pointless interface type UsersDb interface { Get(ctx context....

January 18, 2020 · 3 min · Hector Yeomans

Typescript, Jest and Axios

I found different posts that tell you how to mock Axios using Jest & Typescript. The only difference in this post is that, when I use Axios, I like to use it as a function rather than calling axios.get or axios.post. Imagine you have this Axios request that you want to mock in your tests: //src/index.ts import axios from "axios"; export interface Post { userId: number; id: number; title: string; body: string; } const DummyRequest = (id: number): Promise<Post> => { return axios({ method: "GET", url: `https://jsonplaceholder....

November 3, 2019 · 2 min · Hector Yeomans