Tutorial

Let’s learn the basics on how to use each module.

ibgemaps

Maybe the most useful function here is mapsbr.ibgemaps.get_map(). It lets you get geometric objects associated with a geographic space.

For example, if you want a map of Brazil including states, you’d call:

In [1]: from mapsbr import ibgemaps

In [2]: ibgemaps.get_map("BR", including="states").plot()
Out[2]: <matplotlib.axes._subplots.AxesSubplot at 0x7ffa95e0aa20>
_images/br_with_states.png

Or, supposing you want the Amazonas state map with municipalities, you would call:

In [3]: ibgemaps.get_map("Amazonas", including="municipalities", geolevel="state").plot()
Out[3]: <matplotlib.axes._subplots.AxesSubplot at 0x7ffa95e00be0>
_images/amazonas_with_municipalities.png

Notice that you need to specify if it is a state, a municipality, etc. This avoid ambiguity, e.g., “Rio de Janeiro” is both a state and a municipality.

Another useful function is mapsbr.ibgemaps.geocode(), which is a more specialized function to convert locations names into geometric objects (it doesn’t return a GeoSeries like mapsbr.ibgemaps.get_map()).

In [4]: ibgemaps.geocode("Rio de Janeiro", geolevel="state")
Out[4]: <shapely.geometry.multipolygon.MultiPolygon at 0x7ffa99b001d0>

It’s useful when you want to convert a column with location names into a geometric column:

In [5]: import geopandas as gpd

In [6]: states = ["Rio de Janeiro", "Minas Gerais", "São Paulo", "Espírito Santo"]

In [7]: gdf = gpd.GeoDataFrame({"states": states})

In [8]: gdf
Out[8]: 
           states
0  Rio de Janeiro
1    Minas Gerais
2       São Paulo
3  Espírito Santo

In [9]: gdf["geometry"] = ibgemaps.geocode(gdf.states, geolevel="state")

In [10]: gdf
Out[10]: 
           states                                           geometry
0  Rio de Janeiro  (POLYGON ((-44.7189 -23.359, -44.7189 -23.359,...
1    Minas Gerais  POLYGON ((-40.2223 -17.9804, -40.2553 -17.9717...
2       São Paulo  (POLYGON ((-48.0017 -25.2488, -48.0017 -25.248...
3  Espírito Santo  (POLYGON ((-40.3959 -20.6221, -40.3959 -20.622...

arcgis

This module provides a general API to retrieve data from an ArcGIS server, as some brazilian government institutions stores some interesting data in them, e.g. IBGE.

As you want geospatial data, you’ll most likely be looking for a MapServer type of service in the ArcGIS server. They may be in the “Services Directory” on in a subfolder within it.

To help you browse the available options you can use the functions mapsbr.arcgis.folders() or mapsbr.arcgis.services(), which will list all folders and services in a server, respectively.

As it shall be illustrated next, by default it will search in a IBGE server.

In [11]: from mapsbr import arcgis

In [12]: arcgis.folders()
Out[12]: 
           0
0  Utilities

In [13]: arcgis.services().head()
Out[13]: 
        name       type
0   AGRICOLA  MapServer
1  atlas_mun  MapServer
2   atlas_uf  MapServer
3    BASEMAP  MapServer
4      BIOMA  MapServer

Now, imagine you’re interested in the FAUNA service. You can take a look at the available feature layers like this:

In [14]: arcgis.layers("FAUNA")
Out[14]: 
    id                  name
0    0                 Geral
1    1              Anfíbios
2    2                  Aves
3    3  Outros Invertebrados
4    4               Insetos
..  ..                   ...
14  14                Peixes
15  15                  Aves
16  16             Mamíferos
17  17               Répteis
18  18          Uso da Terra

[19 rows x 2 columns]

Now, to get an actual layer, call mapsbr.arcgis.get_map():

In [15]: arcgis.get_map("BIOMA", layer=0).plot(column="NOME", legend=True)
Out[15]: <matplotlib.axes._subplots.AxesSubplot at 0x7ffa956ece80>
_images/bioma.png

If you want to get a feature layer from another ArcGIS server, you will need to specify its URL. For example:

In [16]: arcgis.get_map(
   ....:     service="Basicos/mapa_basico_UTM",
   ....:     layer=15,
   ....:     baseurl="https://pgeo3.rio.rj.gov.br/arcgis/rest/services/",
   ....: ).plot()
   ....: 
Out[16]: <matplotlib.axes._subplots.AxesSubplot at 0x7ffa96e11390>
_images/rj.png