How to Store Geographic Information in Shapefiles


· ·

Shapefiles are a popular geospatial data format used for storing and manipulating geographic data, such as points, lines, and polygons. They are stored as a set of related files that contain one feature class and are often used in GIS desktop applications like QGIS, ArcGIS, etc. Shapefiles can contain a variety of data, including coordinates, addresses, and user records.

With the PyShp library in Python, you can easily create and work with shapefiles. This library allows you to create new shapefiles, read and process data stored in shapefiles, and write new data to shapefiles. In this tutorial, we will use PyShp to both create and read data from shapefiles.

We will create shapefiles that contain geographic features and location details, which can be viewed and analyzed using GIS software and Python spatial libraries. By the end of this tutorial, you will be able to create and manipulate shapefiles in Python and use them to visualize and analyze geographic data.

Writer Class

To get started with creating shapefiles using PyShp, you will need to install the library using pip:

pip install pyshp

Once pyshp we have installed, we can start working with shapefiles.  To create a shapefile with pyshp, you will need to first import the library into your Python script:

import shapefile

Next, you can create a new shapefile by instantiating a `Writer` object and add the filepath:

sf = shapefile.Writer('shp')

To add attributes to your shapefile data, you can use the field method of the Writer object. This method allows you to create a new attribute table for your shapefile, and add fields (i.e. columns) to the table. For example, to create a new attribute table with a Name field, you can use the following code:


To add data to your shapefile, you can use the point, line or poly methods of the Writer object. These methods allow you to add point, line, and polygon data to your shapefile, respectively. For example, to add a point at the coordinates (10, 10), you can use the following code:

sf.point(10, 10)

In order to add records to the shapefile, you can use the record() method of the Writer object. The record() method allows you to access the data in a shapefile record, which contains information about a particular feature in the shapefile. Each record in a shapefile has a set of attributes associated with it, and the record() method allows you to access these attributes and their values. Here is an example of how you might use the record() method.


Reader Class 

The Reader class in the pyshp library is used to read and parse shapefiles. To use the Reader class, you need to import it from the shapefile module and create an instance of the class by passing the name of the shapefile to the constructor.

import shapefile
sf = shapefile.Reader("shapefile.shp")

Once you have created an instance of the Reader class, you can use its methods and attributes to access and manipulate the data in the shapefile.


The Reader class provides several methods and attributes that allow you to access the metadata of the shapefile.


The numRecords attribute returns the number of records (i.e., shapes) in the shapefile.

num_records = sf.numRecords

The shapeType attribute returns the shape type of the shapefile. The shape type specifies the type of the shapes in the shapefile (e.g., point, line, polygon, etc.).

shape_type = sf.shapeType

The bbox attribute returns the bounding box of the shapefile. The bounding box is a tuple of four coordinates that define the rectangular extent of the shapes in the shapefile. The coordinates are (minX, minY, maxX, maxY).

bbox = sf.bbox

The Reader class provides several methods and attributes that allow you to access the attributes of the shapes in the shapefile.


The fields attribute returns a list of tuples that describe the fields (i.e., columns) in the attribute table of the shapefile. Each tuple consists of two elements: the name of the field and the type of the field.

fields = sf.fields[1:]

The fieldNames attribute returns a list of the names of the fields in the attribute table of the shapefile.

field_names = sf.fieldNames

The fieldTypes attribute returns a list of the types of the fields in the attribute table of the shapefile.

field_types = sf.fieldTypes


In conclusion, the pyshp library is a powerful tool for reading and parsing shapefiles in Python. The Reader class in pyshp provides a range of methods and attributes that allow you to access and manipulate the data in a shapefile, including the metadata, the attributes, and the geometry of the shapes.

Using the Reader class, you can easily read a shapefile and extract the data you need for your application. You can also use the iterRecords() and iterShapes() methods to iterate over the records and shapes in the shapefile, respectively, and the record() and shape() methods to access specific records and shapes by their index.

In addition to the Reader class, the pyshp library also provides a `Writer` class that you can use to create and write to shapefiles. This allows you to easily create and modify shapefiles in your Python applications.

Overall, the pyshp library is an essential tool for working with shapefiles in Python. Whether you are a GIS analyst, a data scientist, or a developer, pyshp can help you read, manipulate, and analyze shapefiles with ease.

I am a Python Developer with experience in web development using Django, Flask, REST API, SQL, HTML, CSS, JavaScript, AWS and Git. I also write technical articles where I explain web development and software engineering.


Click on a tab to select how you'd like to leave your comment

Leave a Comment

Your email address will not be published. Required fields are marked *

Skip to toolbar