Programming and Development

Computer programming and development are critical to the past, present, and future of geospatial systems and techniques. The increasing ubiquity and diversity of online, mobile, and desktop GIS platforms along with the inclusion of cyber-infrastructure components within the bounds of geographic information systems (e.g., supercomputing, wireless sensor networks) means that GIS researchers and professionals need to be fluent in multiple forms of programming, and the life-cycles of system and software development.

Topics in this Knowledge Area are listed thematically below. Existing topics are in regular font and linked directly to their original entries (published in 2006; these contain only Learning Objectives). Entries that have been updated and expanded are in bold. Forthcoming, future topics are italicized


Algorithm Design/Algorithmic Approaches Programming Languages & Libraries
Dynamic Programming in GIS Applications Python for GIS
Natural Language Processing in GIS Applications  PySAL and Spatial Statistics Libraries
Real Tme Programming R for Geospatial Analysis & Mapping
Integer Programming Javascript for GIS
Linear Programming SQL and SQL Derived Languages for GIS
Machine Learning Programming for GIS GDAL./OGR and IO Libraries
GIS and Parallel Programming  
Object-oriented Programming in GIS Applications Application Development
Development Tools Software Lifecycles of GIS Applications
Development Environments for Geospatial Applications Software Requirements for GIS Applications
Message Passing Interface (MPI) for GIS Applications Verification & Validation of GIS Applications
Software Frameworks for GIS Applications Implementation of GIS Applications
Visual Programming for GIS Applications Testing of GIS Applications
Computer-Aided Software Engineering (CASE) Tools Deployment of GIS Applications
GIS APIs Design of GIS Applications
Platform Specific Programming Commercialization of GIS Applications
GPU Programming Licensing of GIS Applications
Programming of Mobile GIS Applications  
Programming of GIS Web Services  
Web GIS Programming  


PD-12 - Commercialization of GIS Applications

The commercialization of GIS applications refers to the process of bringing a software solution to market. The process involves three broad categories of tasks: identifying a problem or aspect of a problem that a GIS application can solve or address; designing and creating a GIS application to address the problem; and developing and executing a marketing plan to reach those with the problem, the potential users. Ideally these categories would be addressed in this order, but in practice, aspects of each are likely to be addressed and iterated throughout the commercialization process.

Bringing a GIS application to market requires expertise in 1) the target industry or market (e.g., forestry); 2) software development (how to design and build a product); 3) law (licenses, contracts, taxes); and 4) business (how to fund development, guide the process, evaluate success, marketing). A single individual or organization, referred to as the provider in this discussion, may lead or execute all three categories of tasks, or engage third parties when specific expertise is required.

PD-04 - Computer-Aided Software Engineering (CASE) tools
  • Use CASE tools to design geospatial software
  • Evaluate available CASE tools for their appropriateness for a given development task
PD-03 - Development environments for geospatial applications
  • Develop a geospatial application using the most appropriate environment
  • Compare and contrast the relative merits of available environments for geospatial applications, including desktop software scripting (e.g., VBA), graphical modeling tools, geospatial components in standard environments, and “from-scratch” development in standard environments
PD-14 - GIS and Parallel Programming

Programming is a sought after skill in GIS, but traditional programming (also called serial programming) only uses one processing core. Modern desktop computers, laptops, and even cellphones now have multiple processing cores, which can be used simultaneously to increase processing capabilities for a range of GIS applications. Parallel programming is a type of programming that involves using multiple processing cores simultaneously to solve a problem, which enables GIS applications to leverage more of the processing power on modern computing architectures ranging from desktop computers to supercomputers. Advanced parallel programming can leverage hundreds and thousands of cores on high-performance computing resources to process big spatial datasets or run complex spatial models.

Parallel programming is both a science and an art. While there are methods and principles that apply to parallel programming--when, how, and why certain methods are applied over others in a specific GIS application remains more of an art than a science. The following sections introduce the concept of parallel programming and discuss how to parallelize a spatial problem and measure parallel performance.

PD-05 - Implementation tasks
  • Explain the rationale for piloting and prototyping new systems
  • Plan a formal quality assurance procedure
  • Construct an effective database structure in a selected GIS or database software based on the physical model
  • Acquire data from primary and secondary sources
  • Transfer data from primary and secondary sources into the database
  • Create customized programs and scripts based on an application design
PD-02 - Integer programming
  • Explain why integer programs are harder to solve than linear programs
  • Differentiate between a linear program and an integer program
PD-01 - Linear programming
  • Explain the role of constraint functions using the simplex method
  • Explain the role of objective functions in linear programming
  • Describe the structure of linear programs
  • Explain the role of constraint functions using the graphical method
  • Implement linear programs for spatial allocation problems
PD-11 - Python for GIS

Figure 1. PySAL within QGIS Processing Toolbox: Hot-spot analysis of Homicide Rates in Southern US Counties.


Python is a popular language for geospatial programming and application development. This entry provides an overview of the different development modes that can be adopted for GIS programming with Python and discusses the history of Python adoption in the GIS community. The different layers of the geospatial development stack in Python are examined giving the reader an understanding of the breadth that Python offers to the GIS developer. Future developments and broader issues related to interoperability and programming ecosystems are identified.

PD-15 - R for Geospatial Analysis and Mapping

R is a programming language as well as a computing environment to perform a wide variety of data analysis, statistics, and visualization. One of the reasons for the popularity of R is that it embraces open, transparent scholarship and reproducible research. It is possible to combine content and code in one document, so data, analysis, and graphs are tied together into one narrative, which can be shared with others to recreate analyses and reevaluate interpretations. Different from tools like ArcGIS or QGIS that are specifically built for spatial data, GIS functionality is just one of many things R offers. And while users of dedicated GIS tools typically interact with the software via a point-and-click graphical interface, R requires command-line scripting. Many R users today rely on RStudio, an integrated development environment (IDE) that facilitates the writing of R code and comes with a series of convenient features, like integrated help, data viewer, code completion, and syntax coloring. By using R Markdown, a particular flavor of the Markdown language, RStudio also makes it particularly easy to create documents that embed and execute R code snippets within a text and to render both, static documents (like PDF), as well as interactive html pages, a feature particularly useful for exploratory GIS work and mapping.

PD-17 - SQL Languages for GIS

SQL (Structured Query Language) is a declarative programming language that is closely linked to the relational database model. It is an accessible and widely adopted language used for query, data modification, and data definition—that is, defining data structures (tables) and other database objects. Important additions to the SQL standard include SQL/PSM, which adds control flow, local variables, and other procedural language features; and SQL/MM Part 3, which adds spatial support. Many complex geoprocessing workflows typically implemented in desktop GIS or scripting languages can easily be implemented in spatial SQL.