Posts

Showing posts from 2023

ArcGIS Pro Trick. A fast way to store your Statistical Classification Permanently

Image
In the old times of ArcMap or any other GIS Software, storing the statistical classification from the symbology setting usually takes efforts of repeated query and field calculations. For example, classifying population attributes using Natural Breaks/Jenks classification method can only be done on-the-fly.  The classified values are not saved in the attribute table, so, if we want to use the classified values, we must repeat the classification. In certain cases, this will cause some difficulties when we need to share the analysis to other party.  Fortunately, ArcGIS Pro has this built-in geoprocessing tool  to handle this kind of task in very fast and easy way. The tool is called Reclassify Field, and here is how to use it. 

Generates Hexagonal Cartogram in ArcGIS

Image
This article delves into the realm of cartogram generation within ArcGIS, a leading Geographic Information System (GIS) platform. We explore the intricacies of cartogram creation using ArcGIS, focusing on the underlying techniques, real-world applications, and best practices for effective visualization. From understanding the tools available in ArcGIS to addressing specific challenges unique to this environment, this comprehensive guide serves as a practical resource for GIS professionals and enthusiasts. Introduction: ArcGIS, developed by Esri, is a widely used GIS software that provides robust tools for spatial analysis and visualization. Within the expansive suite of capabilities that ArcGIS offers, cartogram generation stands out as a powerful method for distorting geographic features based on variable data. This article navigates through the specific functionalities, workflows, and considerations involved in creating cartograms within the ArcGIS environment. Understanding Cartogra

Creating a Web Mapping Application with Leaflet JS

Image
Web mapping applications are powerful tools that enable users to visualize and interact with geographical data. In this tutorial, we'll explore how to build a simple yet effective mapping application using Leaflet JS, a popular JavaScript library for interactive maps.   Leaflet JS is a lightweight, open-source library for creating mobile-friendly interactive maps. It provides a simple and intuitive API for incorporating maps into web pages. A client in FIVVER (if you needs my service for your GIS Job, the FIVVER link on the left top bar of my blog) asked me to make a simple webmapping application using Leaflet JS that has functionality to zoom and pan in seamless way based on the attribute table selection. The data is stored as GEOJSON file and directly injected in the HTML, so the HTML webmap can be opened and distributed in various computer at ease. I design this webmap with simplicity mindset, so reproduction into another website can be done easily. If you are curious about the

Turn Your QGIS Projects into Interactive Web Maps in Minutes!

Image
Embark on an exciting journey as we reveal the wizardry behind transforming your QGIS projects into captivating web maps. In just a few clicks, you can breathe life into your static visualizations, creating an interactive online experience that's both powerful and effortless. Don't miss out on this game-changing tutorial – the link to the video awaits you at the end of this blog post! Discover the incredible capabilities of the OpenGIS Plugin as it effortlessly bridges the gap between your QGIS desktop and the online realm. From intricate heatmaps to sophisticated choropleths, every nuance of your original visualizations is preserved. This is your chance to elevate your maps to new heights, making them not just informative but engaging. Click the video link to witness the transformation firsthand. Flexibility meets convenience with the OpenGIS Plugin. Once your web map masterpiece is ready, the choice of deployment is yours. Whether it's the familiar GitHub or other hosting

Generates Distance / Origin - Destination Matrix of Two Point Layers in QGIS

Image
Here is a short video (under one minute) tutorial about how to perform and calculate Origin - Destination matrix or Distance Matrix between two points layers in QGIS. 

Satellite Imagery Topographic Correction in QGIS

Image
How to generate flat terrain and no topographic undulation in Satellite Imagery. Topographic correction is very helpful for Landcover/landuse classification in steep, hilly or mountainous terrain. Topographic correction guarantee more spectral consistent values for similar landcover in the sun side slopes and shadowed slopes. In the end, more accurate landcover classification can be obtained.

Soil and Rocks Minerals Mapping from ASTER Imagery using Unsupervised Spectral Angle Mapper Classifier and Spectral Library References

Image
How to perform minerals identification and classification of rocks and soil using spectral angle mapper classifier and ENVI software. This demo applied using ASTER imagery, however it is can be extended to Landsat or Sentinel Imagery. Works better in open terrain such as arid or desert region with minimum to none of vegetation cover. Surface reflectance data (atmospherically corrected) is mandatory for the best result. Field inspection also mandatory to assess the classification accuracy because SAM is very sensitive to different parameter settings.

Remote Sensing in Geology. Generates Mineralogy Sensitive Color Composite Imagery

Image
Color composites generation workflow which emphasizes to mineral (clay, iron oxide, and ferrous minerals) distribution over wide area. This workflow can be applied to Landsat-8 or Landsat-9 imagery. Similar workflow also can be done for Sentinel-2 MSI imagery. Workflow can be applied to Level-1 data, and the most optimal is applied to the surface reflectance level data. Key interpretation about color and mineralogy association: 1. Reddish color = ferrous minerals 2. Greenish color = clay minerals 3. Bluish color = iron oxide minerals

Offline Basemap Solution for Mobile Mapping in Android or Apple IOS Devices.

Image
Hi, this post is about four solutions about how to perform offline basemap creation for mobile mapping in Android or Apple IOS devices. For this first part. I will demonstrate about GeoPDF format that is widely supported in most GIS Software. I will demonstrate how to write GeoPDF in ArcGIS Desktop (ArcGIS Pro also has this functionality) and QGIS, followed by how to load the GeoPDF Map in a supported Android/IOS App. Unfortunately, when this video is made, the only app that can read GeoPDF is only Avenza PDF Maps (available in Android and IOS). The rest is no longer updated (TerraGO GeoPDF) or part of paid services (Global Mapper Mobile Pro). Utilizing GeoPDF for field mapping basemap is very effective and simple. All data in one file. They are structured and tailored according to your setting on the GIS Desktop. They also provide good loading performance as long as the file is not relatively huge. For the second part. I will demonstrate the ArcGIS Mobile Map Package (MMPK) forma

Batch and Mass Exporting ArcGIS MXD to PDF using ArcPy

Image
Here is the code if someone need this,  import arcpy, sys, os, string mxdList = string . split(arcpy . GetParameterAsText( 0 ), ";" ) outloc = arcpy . GetParameterAsText( 1 ) resolution = arcpy . GetParameterAsText( 2 ) georef_info_option = arcpy . GetParameterAsText( 3 ) layers_attributes_option = arcpy . GetParameterAsText( 4 ) for item in mxdList: item = item . strip( ' \' ' ) mxd = arcpy . mapping . MapDocument(item) base = os . path . basename(item) base = os . path . splitext(base)[ 0 ] + ".pdf" pdf_path = os . path . join(outloc, base) # Switch to layout view for df in arcpy . mapping . ListDataFrames(mxd): if df . name == "Layers" : mxd . activeView = df . name mxd . title = df . name # Export to PDF with specified parameters arcpy . mapping . ExportToPDF(mxd, pdf_path, resolution = resolution, georef_info = georef_info_option, layers_attribut

Geocoding in Google Sheets

Image
How to perform Forward Geocoding (convert Address to Latitude Longitude Coordinates) automatically in Google Sheets Spreadsheet. Example using OSM's Nominatim API service. Other geocoding services such as Google, Bing, MapQuest, Mapbox, or ArcGIS Online also supported as long as you provide the API key and correct query URL in the URL cells.

Fast and Automatic Removal of Dangling Nodes, Pseudo Nodes, and Loose Ends in Polyline GIS Data

Image
This video is about how to fix, clean, remove dangling nodes, overshoot, undershoot, or loose ends commonly found in Polyline GIS data, in very fast, automatic and easy way using ArcGIS Desktop (also can be done in ArcGIS Pro). These error will limiting further processing such as polygons generation from polylines data or other needs. The secret is using hidden but super powerful CLEAN command in ArcInfo Coverage format from the golden DOS age of GIS in the 80's.

Serverless Raster or Imagery Tile Serving using PMTiles

Image
A few months ago, I created a video tutorial about how to serve raster or imagery tiles using Github  using TMS/XYZ Tile Serving protocol. The tiles can be consumed by a web gis app either as a base  map or operational layer. Although the workflow is proven to be working for general cases, the tiles  displaying and loading speed are quite mediocre compared to API-based serving such as WMS,  WMTS, or ArcGIS Services.  Now, there is one protocol called PMTiles that can also provide similar functionality with additional  features and better loading/displaying performance. PMTiles in many ways is similar to Mapbox  MBTiles format (the tiles are packed into a single file), or ArcGIS's TPK Package. However, PMTiles  can be served directly using a common HTTP query (not like MBtiles or TPK which must be deployed into API Services to be able to be consumed by a webgis client). So, if you want to use Github as your host, you won't find an uploading problem because the file can be upload

HOW TO BUILD LOD2 3D BUILDING DATA USING LIDAR POINT CLOUD DATA IN ARCGIS PRO

Image
1. The workflow demonstrated in this video uses ready-to-use LIDAR point cloud data, in that the  data has already undergone all of the LIDAR pre-processing steps up to point cloud classification. If  you have raw LIDAR or pre-classified LIDAR point clouds, I suggest you do the pre-processing and  point cloud classification first; there are many software programs that can do that. I also made one  video about it; just check my Agisoft Metashape Playlist. 2. I am using ready-to-use LIDAR data from the USGS LIDAR 3DEP Portal at this URL:  https://apps.nationalmap.gov/lidar-explorer/#/; the data is available for free and no registration is  needed. Highly recommended data source for learning purposes. 3. I am using ArcGIS Pro with an Advanced License and the 3D Analyst Extension for ArcGIS Pro; if  you don't have these prerequisites, I am afraid you wouldn't be able to practice the workflow I  demonstrated in this video.

ArcGIS Online Basemaps Styles Customization Using ArcGIS Vector Tile Editor

Image
How to customize the ArcGIS basemaps styles, symbols, color, and other visualization properties using ArcGIS Vector Tile Editor. Customization result can be used in across of ArcGIS Family software such as ArcGIS Enterprise, ArcGIS Pro, even in QGIS and Geoserver. 

SVG to GIS Vector Data Conversion and Vice Versa

Image
How to convert SVG (Scalable Vector Graphics) to GIS Vector Data (SHP or Mapinfo or any other format) using QGIS and Inkscape. GIS and Inkscape is a free and open source software that you can download from their respective site.

How to Build HTML Form with Ability to Extract Geolocation Data From the Browser/Mobile Devices and Populate the Form Data in Google Sheets

Image
Just as the post title suggest, this post is about how to do it. Here are the steps.  1. Create a New Google Sheets Spreadsheet. Give a meaningful and consistent header such as the image below:  2. Share it as public (anyone with the link) and set the anyone as Editor.  3. From the GSheets Menu, go to Extension > App Scripts.  4. Delete the initial function, and copy/paste code snippets below.  // Original code from https://github.com/jamiewilson/form-to-google-sheets // Updated for 2021 and ES6 standards const   sheetName  =  'Geolocation' const   scriptProp  =  PropertiesService . getScriptProperties () function   initialSetup  () {    const   activeSpreadsheet  =  SpreadsheetApp . getActiveSpreadsheet ()    scriptProp . setProperty ( 'key' ,  activeSpreadsheet . getId ()) } function   doPost  ( e ) {    const   lock  =  LockService . getScriptLock ()    lock . tryLock ( 10000 )    try  {      const   doc  =  SpreadsheetApp . openById ( scriptProp . getProperty (