English checklist for Panama

I have created an English Checklist of the Birds of Panama in preparation for my upcoming visit to Panama. It includes 975 species, and can be printed on two double-sided 8.5″ x 11″ sheets of paper. Enjoy.


August 15, 2014 at 7:41 pm | No comments


Comments are turned off

Comments will be turned off until the spammers go away. If you want to reach me send an email to my Gmail account. My address is my first name, a dot, and my last name.


March 23, 2014 at 4:26 pm | No comments


Map data disclosure

Some data for North & South American species provided by NatureServe in collaboration with Robert Ridgely, James Zook, The Nature Conservancy – Migratory Bird Program, Conservation International – CABS, World Wildlife Fund – US, and Environment Canada – WILDSPACE.


August 31, 2012 at 1:48 pm | No comments


Getting data from GBIF.org

  1. Go to http://data.gbif.org
  2. Enter the genus and species in the search box
  3. Click on link under species list
  4. Click on ‘Explore: Occurences’
  5. Click on ‘Download: Spreadsheet of results’
  6. Select file format (CSV) and click ‘Download now’
  7. Store the file on the local machine

August 28, 2012 at 1:21 pm | No comments


Fixing the Flash audio player

For whatever reason the Google Reader flash player is no longer available from Google. I was able to find the player at http://www.findthatvideo.com/search-3991124-hSWF/video-download-3523697345-audio-player.swf.htm and downloaded to my own server. Fixing the source link was the matter of two minutes. Problem solved, and audio files can be played again.


August 22, 2012 at 8:54 pm | No comments


Creating range maps with R

Using the range data available from Lifemapper has been an adventure. Mapping the data onto the world map is relatively simple and straightforward:

library(maps)
library(ggplot2)

# read range data
range.data <- read.csv(file=range.file,header=T) # create world range map world.map <- map_data("world") ggplot(world.map, aes(long, lat)) +   geom_polygon(aes(group = group), fill = "white", color = "gray40", size = .2) +   geom_jitter(data = range.data, aes(lon, lat), alpha=0.6, size = 4, color = "red") +   annotate("text",x=175,y=-87,label=map.make,size=3) +   opts(title = map.title)

I wanted to map the same data onto a map of Africa. Unfortunately, I could not find a shapefile for Africa so I had to create my own. That exercise will be documented separately in another post. Once I had the shapefile created plotting the dta was only a little harder than before:

library(maps)
library(ggplot2)
library(rgeos)
library(maptools)
library(gpclib)

# read range data
range.data <- read.csv(file=range.file,header=T) #create Africa range map africa <- readShapeSpatial("GIS DataBase/Africa_adm0.shp") africa.map <- fortify(africa) ggplot(africa.map, aes(long, lat)) +   geom_polygon(aes(group = group), fill = "white", color = "gray40", size = .2) +   geom_jitter(data = range.data, aes(lon, lat), alpha=0.6, size = 4, color = "red") +   annotate("text",x=53,y=-48,label=map.make,size=3) +   opts(title = map.title)

Playing around with the different ggplot parameters was an interesting exercise in getting the map to look the way I thought it should. The final code to produce range maps for Malachite Kingfisher:

library(maps)
library(ggplot2)
library(rgeos)
library(maptools)
library(gpclib)

genus <- "Corythornis" species <- "cristatus" common <- "Malachite Kingfisher" # set up common variables map.title <- paste(genus," ",species," (",common,")",sep="") range.file = paste("birds/",genus,"_",species,".csv",sep="") filename0 <- paste("maps/map0_",genus,"_",species,".png",sep="") filename1 <- paste("maps/map1_",genus,"_",species,".png",sep="") map.make <- paste("created",format(Sys.Date(),format="%d %b %Y")) # read range data range.data <- read.csv(file=range.file,header=T) # create world range map world.map <- map_data("world") pWorld <- ggplot(world.map, aes(long, lat)) +   geom_polygon(aes(group = group), fill = "white", color = "gray40", size = .2) +   geom_jitter(data = range.data, aes(lon, lat), alpha=0.6, size = 4, color = "red") +   annotate("text",x=175,y=-87,label=map.make,size=3) +   opts(title = map.title) ggsave(filename=filename0,plot=pWorld,width=16,height=9) #create Africa range map africa <- readShapeSpatial("GIS DataBase/Africa_adm0.shp") africa.map <- fortify(africa) pAfrica <- ggplot(africa.map, aes(long, lat)) +   geom_polygon(aes(group = group), fill = "white", color = "gray40", size = .2) +   geom_jitter(data = range.data, aes(lon, lat), alpha=0.6, size = 4, color = "red") +   annotate("text",x=53,y=-48,label=map.make,size=3) +   opts(title = map.title) ggsave(filename=filename1,plot=pAfrica,width=5,height=5)

World map:

Africa map:

The next improvement I will be making is reading the data directly from the web site, but that is an exercise for another day.


August 22, 2012 at 8:21 pm | No comments


Obtaining range data

After an extensive search for latitude/longitude based range data the source I have settled on using is Lifemapper (http://lifemapper.org/index.shtml), which is an aggregator of a number of record databases, both museum specimens and sight record databases (such as eBirds).

My first attempt at using the data is to download the data sets in CSV format and aggregate the data in my local machine. Future plans are to get the data sets programatically so that I can periodically recreate the range maps without re-downloading all the relevant data sets.


August 22, 2012 at 7:37 pm | No comments


New Kingfisher photo gallery

Chris Pienaar has put together an album of his African kingfishers. Check it out!


March 7, 2012 at 3:49 pm | No comments


Updates

I have moved all the daily updates to a separate page. If you want to see them there is a link at the bottom of the sidebar, or you can jump directly there.


February 23, 2012 at 5:10 pm | No comments


Taxonomy

The taxonomy of the kingfisher family, Alcedinidae, will follow the 2011 update to the Clements Checklist, version 6.


February 11, 2012 at 2:15 pm | No comments


Next Page »