Get minimum Bounding box of shapefile c++ program

Get minimum Bounding box of shapefile c++ program. This program not only reads shapefile, but makes you aware to read other files, i.e files which have .dbf, .exe, .png etc format without having software. Before that you should know about bits, byte order, and conversion of bytes to other data types and most importantly the format of the files that you want to read.

A shapefile stores non topological geometry. ESRI shapfile mainly contains 3 files, i.e .shp, .shx and .dbf files. To get bounding box details of shapefile, we need to concern about .shp file format. You can find all the technical discription of shapefile, provided by esri in their website.

Shapefile .shp has 3 parts, i.e file header, record header and record contents. File header stores the bounding box of shapefile. You can also see c++ program to read shapefile header. Here is the program:

Get minimum Bounding box of shapefile c++ program

#include<iostream>
#include<stdio.h>
#include<conio.h>

using namespace std;

class ByteConverter
{
    public:
        //Convert 32 bits which is stored in BigEndian format to integer. This is performed with the help of bit operation i.e left shifting and operating or.
    static int32_t bigEndianIntRead(char *fileBuf, int startIndex)
    {
        return (((fileBuf[startIndex + 0] & 0xff) << 24) | ((fileBuf[ + 1] & 0xff) << 16)| ((fileBuf[startIndex + 2] & 0xff) << 8) | ((fileBuf[startIndex + 3] & 0xff)));
    }
    //Convert 32 bits which is stored in BigEndian format to integer. This is performed with the help of bit operation i.e left shifting and operating or.
    static int32_t littleEndianIntRead(char *fileBuf, int startIndex)
    {
        return (((fileBuf[startIndex + 3] & 0xff) << 24) | ((fileBuf[startIndex + 2] & 0xff) << 16) | ((fileBuf[startIndex + 1] & 0xff) << 8) | ((fileBuf[startIndex + 0] & 0xff)));
    }
    //Convert 64 bits or 8 Byte which is stored in BigEndian format to integer. This is performed with the help of bit operation i.e left shifting and operating or.
    static double littleEndianDoubleRead(char *fileBuf,int startIndex)
    {
        double convert;
        char *add;
        int j;
        add = new char();
        j=-1;
        for(int i=startIndex; i<startIndex+8; i++)
        {
            j++;
            add[j] = fileBuf[i];
        }
        convert = *reinterpret_cast<double * const>(add);
        return convert;
    }
};

//Class HeaderShapefile have all funtion implemented to desribe every field of shapefile header file.
class HeaderShapefile
{
    public:

    //This funtion of the class will calculate the bounding box coordinates of the shapefile.
    //Following values i.e x and y minimum and maximum values also with z and m minimum
    // and maximum values are obtained.


    static double dimensionXMin(char*fileBuf, int startIndex)
    {
        return ByteConverter::littleEndianDoubleRead(fileBuf,startIndex);
    }

    static double dimensionYmin(char*fileBuf, int startIndex)
    {
        return ByteConverter::littleEndianDoubleRead(fileBuf, startIndex);
    }

    static double dimensionXmax(char*fileBuf, int startIndex)
    {
        return ByteConverter::littleEndianDoubleRead(fileBuf, startIndex);
    }

    static double dimensionYmax(char*fileBuf, int startIndex)
    {
        return ByteConverter::littleEndianDoubleRead(fileBuf, startIndex);
    }
};

class SizeOfFile
{
    public:
        //This function finds the size of file in Byte
    static long sizeOfFiles(FILE *file)
    {
            long l, e;
            l = ftell(file);
            fseek(file, 0, 2);
            e = ftell(file);
            fseek(file, l, 0);
            return e;
    }
};

int main()
{
    int32_t filecodes, fileLengths, shapeTypes, versions;
    double xmin, ymin, xmax, ymax, mmin, mmax, zmin, zmax;
    string shape;
    char *filePath = "map.shp";
	char*fileBuf;			// Pointer to our buffered data
	FILE *file = NULL;		// File pointer
	// Open the file in binary mode using the "rb" format string
	// This also checks if the file exists and/or can be opened for reading correctly
	if ((file = fopen(filePath, "rb")) == NULL)
		cout << "Could not open specified file" << endl;
	else
		cout << "File opened successfully" << endl;

	// Get the size of the file in bytes
	long fileSize = SizeOfFile::sizeOfFiles(file);

	// Allocate space in the buffer for the whole file
	fileBuf = new char[fileSize];

	// Read the file in to the buffer
	fread(fileBuf, fileSize, 1, file);

	// Now that we have the entire file buffered, we can take a look at some binary infomation

	cout<<"File size = " <<fileSize;

    xmin = HeaderShapefile::dimensionXMin(fileBuf,36);
    ymin = HeaderShapefile::dimensionYmin(fileBuf,44);
    xmax = HeaderShapefile::dimensionXmax(fileBuf,52);
    ymax = HeaderShapefile::dimensionYmax(fileBuf,60);

    /*****************MINIMUM BOUNDING BOX OF SHAPEFILE DETAIL*********************/

    cout<<endl<<"\n/*****************MINIMUM BOUNDING BOX SHAPEFILE DETAIL*********************/\n\n";

    cout<<"X minimum = "<<xmin<<endl;
    cout<<"Y minimum = "<<ymin<<endl;
    cout<<"X maximum = "<<xmax<<endl;
    cout<<"Y maximum = "<<ymax<<endl;

	cin.get();
	delete[]fileBuf;
        fclose(file);   // Almost forgot this
	return 0;
}

Output of Get minimum Bounding box of shapefile c++ program

Get minimum Bounding box of shapefile c++ program
Get minimum Bounding box of shapefile c++ program

What is GIS | Geographic Information System

What is GIS | Geographic Information System? GIS is an Abbreviation of Geographical Information System or Geo-spatial Information Systems or Geologic Information Systems (also Geo-spatial database management). As the name suggest ‘GIS’ is related to geographical information. But before explaining what is GIS?, we should know about what Geographic information means? Geographic information is knowledge of where something is. It defines the spatial reference of the element or matter present on earth surface.

As it is said “a picture is worth a thousand words”, Maps plays a lead role in defining geographical information. We control map to guide someone to know the actual  route, exact destination, its distance, its elevation, its surroundings etc. Geographical information is needed to Government, Industries, Business markets, Tourism and services sector,  Education, Agriculture, Health, Disaster Management,  Transportation and also to a common people. It makes us easy to locate an area of industries, day care center, restaurant, mall, head quarter or any other specific place.  It solves everyday issues. What is the shortest route to get to work? How can i get to hotel? Where is the location of my new office? So, Geographical information is part of our lives. But how can we get geographic information and What is GIS?

Geographic Information System
Geographic Information System

What is GIS | Geographic Information System?

GIS is a tool to acquire geographic data and produce Geographic information. Generally Information about those features are stored in tabular formGIS can be defined as a “computer information system that can input, store, manipulate, analyze, and display geographically referenced (spatial) data to support decision making processes”.
GIS enables us to connect dynamic relations between spatial data (geo referenced) & relational data (attribute of features in tabular forms). It enable us to make models of reality, of the ground and to answer question such as what is where? Main component of Geographic information system are: Hardware, Software, Data and People.

You may also be interested in knowing GIS Uses and Application in different industries.

Geographic Information System
Geographic Information System
Some organizations defined GIS – Geographical Information System as :

A geographic information system (GIS) is a computer-based tool for mapping and analyzing things that exist and events that happen on earth. GIS technology integrates common database operations such as query and statistical analysis with the unique visualization and geographic analysis benefits offered by maps.” ~ ESRI

“GIS is an integrated system of computer hardware, software, and trained personnel linking topographic, demographic, utility, facility, image and other resource data that is geographically referenced.” ~ NASA 

Google Map can be considered as an Example of GIS tool. You can have a look over 35+ Google Tips and tricks.

The demand for GIS tools is continuously growing. One of such tool is QGIS(Quantum GIS), and is a cross platform, free open source desktop application. From a citizen to an organization, every body needs Geographic information. You can find here advantage of GIS and Why GIS. I hope that reading this post will make you to learn more about Geographic information System. I would appreciate your comment, if you like to share more ideas related to the same topic.

How to remove gaps from a polygon layer file in ArcGIS?

How to remove gaps from a polygon layer file in ArcGIS? While preparing polygon layer file following various stages of layer preparation like

This is what making it suitable to be used by a web application as an input. While layer file should be accurate with minimum error before deploying or issuing the same to the client, which requires lots of time to make.  Obviously no client for project submission will tolerate the delay and so this task time is to be reduced. So this blog post will deal with, how reduce time duration of preparing a layer file?

If you are new to ArcGIS, I recommend you to Look for  FAQ  and Interview of ArcGIS Tutorial.

Remove gaps from a polygon layer file in ArcGIS:

This is quite possible by using ArcGIS inbuilt tools and this can be accomplished by understanding the need and using appropriate tool. A number of errors are generated at various stages of layer preparation like gap in a feature, overlap with other feature, self over and many more. These errors can be detected by selection tool or by running topology rules for every layer. But the question is removal of these errors. If there are just a hundred of polygons in layer one can remove it manually zooming on to every gap and overlap. But if there are a million or more number of polygons in a layer for example if a village has 1000 parcel on an average in a district of 600 villages, the total number of parcel in a district comes out to be 6 lakh. It takes almost equal time in preparing an error free file as much time used for preparing the layer file.

For this one task i.e. removal of gaps in a feature can be made easy and can be performed in less time by the use of a tool named Eliminate present in the Data Management toolset of ArcGIS.

Steps to remove gaps from a polygon layer file in ArcGIS

remove gaps from a polygon layer file in ArcGIS
Detection of Gaps in the polygon File

 

1.) First all gaps in a layer file should be converted to polygons using auto complete polygon tool from the editor bar.

remove gaps from a polygon layer file in ArcGIS: Forming polygons from gaps using Auto-complete tool
Forming polygons from gaps using Auto-complete tool

2.) Then these polygons should be copied to layer file.

remove gaps from a polygon layer file in ArcGIS: Copying gap polygon to main file.
Copying gap polygon to main file.

3.) Selecting all gaps in the form of polygon apply eliminate tool from data management toolset on the layer file.

remove gaps from a polygon layer file in ArcGIS: Applying Eliminate tool on the polygon file to remove gaps.
Applying Eliminate tool on the polygon file to remove gaps.

4.) The gaps are merged with the neighboring polygon having larger area or longer shared border.

In this way the work of one month can be reduced to one week or lesser. This tool should be used for removal of small gaps only. As for larger gaps the decision of merging the gap polygon in which neighboring polygon should be done by visual interpretation and analytically perspective.

If you are dealing with Raster files with ArcGIS and with multispectral band files, you may look for Pan-sharpening image using ArcGIS.

Hope this tutorial would help you to remove gaps from a layer file in ArcGIS.  While I always works in Open Source tool in GIS, I would like to make you check the QGIS and QGIS tutorials.

If you are facing any problem related to the above, then do comment below, we would look for the problem and suggestion for the same.