Search code examples
pythonmatplotlibcartopy

Why are some of the weather station coordinates out of the Nigerian boundary?


The following lines of code have been used to plot points (coordinates)for weather stations in Nigeria, unfortunately, some of the stations fell outside of the country's boundary. I confirm that the latitude and longitude of the weather stations are accurate and double-checked. Any suggestion/solution for this off-shoot would be highly appreciated. Thank you.

...

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as feature
import cartopy.io.shapereader as shapereader
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import pandas as pd

df = pd.read_csv("met_ngstation.csv")

countries = shapereader.natural_earth(resolution='10m',
                                  category='cultural',
                                  name='admin_0_countries')

# Find the Nigeria boundary polygon.
for country in shapereader.Reader(countries).records():
    if country.attributes['SU_A3'] == 'NGA':
        nigeria = country.geometry
        break
else:
    raise ValueError('Unable to find the NGA boundary.')

plt.figure(figsize=(20, 10))
ax_map = plt.axes(projection=ccrs.PlateCarree())

ax_map.set_extent([-1, 19, -1, 17], ccrs.PlateCarree())

#ax_map.coastlines()
ax_map.add_feature(feature.COASTLINE, linewidth=.5)

ax_map.add_geometries([nigeria], ccrs.PlateCarree(), 
edgecolor='0.8',
              facecolor='none')

grid_lines = ax_map.gridlines(draw_labels=True)
grid_lines.top_labels = False
grid_lines.right_labels = False

lon_formatter = LongitudeFormatter(zero_direction_label=True)
lat_formatter = LatitudeFormatter()

ax_map.xaxis.set_major_formatter(lon_formatter)
ax_map.yaxis.set_major_formatter(lat_formatter)

plt.scatter(df['LONG'],df['LAT'],
                color='red', marker='.', 
transform=ccrs.PlateCarree())

#plt.savefig('coastlines_ng.pdf')
#plt.savefig('coastlines_ng.png')

plt.show()

'''

Link to map: https://drive.google.com/file/d/1cNnylUOmi-Dg6ioZE0tQj7xCHRdMPIh8/view?usp=sharing


Solution

  • As @JodyKlymak suggested, this is an issue with the input data, not cartopy.

    You can check this by using an online map service like Google Maps

    Google map showing one of the scatter points offshore

    From this image, you can see that station "Eket" in the linked dataset, lon=7.95, lat=4.4, is located ~ 10 km offshore of Kwa Ibo. This is typical of meteorological buoys

    Always check your input data!