Wednesday, April 24

Map your eBird History!

Here's an awesome new map of personal eBird checklist submissions over time from Brian Sullivan:

http://geocommons.com/maps/252746



Thanks to Jared Fischer for the idea and development work!

Here's how to do this:

Friday, January 4

BirdTrax Website Embedder

Here's a simple machine to help you embed BirdTrax on your website. As of Wednesday, the Google Gadget Embedding page doesn't seem to be responding. Hopefully Google can fix this soon, but until then here's another way to do the same thing.

Fill in the information below, then click "Get Code!" to copy the code you need to paste on your website to place the gadget. If you encounter any issues, please comment or email me.

Tuesday, December 4

Make your own LifeMap from your eBird Data

In about 10-20 minutes, depending on your proficiency with technology, you can put together a map showing your worldwide travel routes based on your eBird data. This is awesome for travelogues, date error detection in data cleanup, and quite frankly, it's cause for a good sense of personal satisfaction.

My eBird Record of 2 Weeks in Europe

A Birder's "LifeMap"

What does your "LifeMap" look like? Here's mine:


Kind of savvy, isn't it??


The two maps above show every location at which I have submitted an eBird checklist throughout my life. This map simply takes my eBird data, sorts every observation by date, and then runs down the list, connecting the dots with lines of thickness proportional to how many observations I've submitted for that location.

I'll put up a tutorial on how to do this in the next few days!

Thursday, September 13

Update on BirdTrax

BirdTrax, now a famous little Google Gadget with over 1,250,000 views, has a constantly increasing popularity. It's handy little checklist feature has really taken the fancy of many birders all over the world. Birders can see who goes birding in their area.

I'm very excited to see so many birders enjoying this handy tool. The BirdTrax Google Gadget is, and will always, remain free.

But BirdTrax should be more than just a Google Gadget. Eventually, as resources allow, BirdTrax may be migrated to more modern platforms and marketplaces. At least, this is my hope. At the present, development is in the doldrums. When I get a chance, I'll jump on it and create a cutting-edge application for the most modern interface. Until then, enjoy this gadget!

Monday, July 30

How I Twitch using eBird

I recently did a half-day trip and drove cross-state to score a regional rarity. The target bird was a juvenile White Ibis at Pointe Mouillee SGA in SE Michigan. While this wasn't the once-in-a-lifetime kind of tick, it was still worth the drive.

In this post, I'd like to highlight the way I prepare for a twitch like this one, and explain how I used eBird data to make my Mouillee ibis hunt more enjoyable, and also profitable to others.

First off, I plan my route.

My instinct is to race straight-line for "the bird".
  • So pull out the GPS and plug in the coordinates!
  • If you need a potty break, pick a good rest area (my Lapeer County, MI list is mostly all from the rest area along I-196).
  • If you need a hotel, pick a good hotel, and you might just get a Dickcissel!
  • If you need to tank up, watch the gas stations from the highway for good habitat, and go on a quick run while your tank fills up.  Here's a favorite gas station of mine in Genesee county, Michigan (I like the drainage pond during shorebird migration and the field across the road during Dickcissel season):

(this is a Meijer Gas Station with "Good Habitat")

Tuesday, July 17

Tutorial: Embed eBird Data on your Website (Part 1: Rarities)

If you're a web-developer, programmer, website owner, or blogger, you may wish to embed eBird Data on your website. What are the advantages?
  • Fast download time, much faster than a Google Gadget
  • Flexible design, so you can customize it so it blends into your website
  • You can write your code in JavaScript, an easy-to-learn and easy-to-use programming language
In this post, the first in a series of tutorials on embedding eBird data on your website, I'll walk you through a code designed to display recent rarities in your area. All you need is a little tech-savviness, a website, and an hour or two.

Goal:
Using eBird APIs, a set of XML databases containing recent bird observations, we'll output the latest rarities in a region and give it a little formatting. In the end, your result should look something like this:

Monday, July 16

eBirdGM Upgrade: Now Embed on Your Website

I've just released an upgrade of eBirdGM--the free code generator to help you embed Google Maps in your eBird checklist comments. Check it out below in action:

Embed Google Maps
in eBird Checklists
the Easy Way!

Marker A:  
Marker B:  
Marker C: More >
Zoom: Normal
Map Type:
Colors:Use Multiple Marker Colors 
Labels:Show Labels? 
Visit the eBirdGM Homepage

This update also provides you with the ability to put up to 10 markers on your map, and gives you the new option of enabling/disabling multiple marker colors. Here's an example of the new potential at work:
Let's say these markers represent the movements of a rare Terek Sandpiper in Oostvaarderplassen, The Netherlands :)
If you like this code generator, you may want to embed it on your website. It's easy, just click on the code in the box below, and click Ctrl-C. Find the place on your website you'd like to paste the code and then click Ctrl-V. Your users will thoroughly enjoy the novel Google Maps in checklist comments idea!

<div style="background: rgb(223,238,245); border-left: 4px solid rgb(210,59,12);border-top:4px solid rgb(49,116,197);border-right:4px solid rgb(63,140,68);border-bottom:4px solid rgb(245,245,50);margin: 20px; padding: 10px 10px 10px 20px; text-align: left; width: 90%;border-radius:15px;width:375px;">
<div style="height:75px;">
<table><tr><td style="width:210px;height:75px;"><a href="http://www.birdventurebirding.com/2012/07/embed-google-maps-in-ebird-checklist.html"><img src="https://lh6.googleusercontent.com/-Saz5oDL2LXA/UAQW3LbV0BI/AAAAAAAAA6k/WxZbCGKBunY/s203/eBirdGMsmall.png" /></a></td><td style="margin-left:10px;border-left:1px solid rgb(200,200,200);padding-left:10px;font-weight:bold;">Embed Google Maps<br />in eBird Checklists<br />the Easy Way!</td></tr></table>
</div>
<hr />


<table>
<tr>
<td style="width:80px;"><b>Marker A:</b></td>
<td><input type="text" value="Latitude, Longitude" onfocus="clearText(id)" id="markerA" onblur="regenerateText(id)" style="background:rgb(250,250,250);outline:none;border:none;color:rgb(135,135,135);width:230px;font-style:italic;border-radius:10px;width:160px;padding:5px;" maxlength="25" />
<td>&nbsp;</td>
</tr>
</table>
<table>
<tr>
<td style="width:80px;"><b>Marker B:</b></td>
<td><input type="text" value="" id="markerB" style="background:rgb(250,250,250);outline:none;border:none;color:rgb(10,10,10,);width:230px;border-radius:10px;width:160px;padding:5px;" maxlength="25" />
<td>&nbsp;</td>
</tr>
</table>
<table>
<tr>
<td style="width:80px;"><b>Marker C:</b></td>
<td><input type="text" value="" id="markerC" style="background:rgb(250,250,250);outline:none;border:none;color:rgb(10,10,10);width:230px;border-radius:10px;width:160px;padding:5px;" maxlength="25" />
<td style="color:rgb(49,116,197);text-decoration:underline;padding:5px;cursor:pointer;" onclick="addMarker(this)">More &gt;</td>
</tr>
</table>
<div id="markers">
</div>
<table>
<tr><td style="width:80px;"><b>Zoom:</b></td><td>
<input type="range" min="0" max="6" value="3" step="1" onchange="showValue(this.value)" id="zoomLevel" style="width:100px;outline:none;" /></td><td id="zoomValue">Normal</td>
</tr>
<tr><td><b>Map Type:</b></td><td><select style="background:rgb(250,250,250);outline:none;border:none;padding:0px 0px 0px 5px;" id="mapType"><option value="hybrid">Hybrid</option><option value="satellite">Satellite</option><option value="terrain">Terrain</option><option value="roadmap">Road Map</option></select></td><td></td>
</tr>
<tr><td><b>Colors:</b></td><td><input checked="checked" id="markerColors" type="checkbox" />Use Multiple Marker Colors</td><td>&nbsp;</td></tr>
<tr><td><b>Labels:</b></td><td><input checked="checked" id="showLabels" type="checkbox" />Show Labels?</td><td>&nbsp;</td></tr>
<tr><td><input onclick="getCode()" type="button" id="codeButton" value="Get Code!" /></td><td colspan="2"><a href="http://www.birdventurebirding.com/2012/07/embed-google-maps-in-ebird-checklist.html">Visit the eBirdGM Homepage</a></td></tr>
</table>


<div id="code">
</div>
<div id="codeSpot" style="background:white;width:100%;overflow-x:auto;white-space: nowrap;" onclick="selectText()">
</div>
<div id="notes">
</div>


</div>


<script type="text/javascript">
function getCode() {
document.getElementById("code").innerHTML="";
var mapType = document.getElementById("mapType").value;
var zoomLevel = Number(document.getElementById("zoomLevel").value);
var showLabels = document.getElementById("showLabels").checked;
var markerColors = document.getElementById("markerColors").checked;
var checkMarkers = new Array();
var markerNames=["A","B","C","D","E","F","G","H","I","J"];
var valid = "true";
for(i=0;i<10;i++){
  var id = "marker" + markerNames[i];
  if(document.getElementById(id)){
    var value = document.getElementById(id).value;
    if(value!=null&&value!="undefined"&&value!=""){
      if(value.indexOf(".")>0&&value.indexOf(",")>0&&value.length>=14){
        checkMarkers.push(value);
      }
     else{
        document.getElementById("code").innerHTML+="<b><span style='color:red;'>Marker " + markerNames[i] + " is invalid.</span></b>&nbsp;&nbsp;";
        if(value=="Latitude, Longitude"){document.getElementById("code").innerHTML+="You must enter a coordinate for at least marker A.<br />";}
        if(value.indexOf(",")==(-1)){document.getElementById("code").innerHTML+="It does not appear to have a comma (,) separating the coordinates.<br />";}
        if(value.indexOf(".")==(-1)&&value!="Latitude, Longitude"){document.getElementById("code").innerHTML+="Make sure your coordinates are in decimal form (e.g. 85.4247,-73.5619).  Your entry for this marker does not appear to have any decimals in it.<br />";}
        if(value.length<15){document.getElementById("code").innerHTML+="Your coordinate is not precise enough.  You must enter at least 4 decimal places.  Remember, the accuracy of your coordinate is important!<br />";}
        valid = "false";
      }
    }
  }
}


if(valid=="true"){
var code='http://maps.googleapis.com/maps/api/staticmap?center=' + checkMarkers[0].replace(" ","").replace(" ","").replace(" ","") + '&zoom=' + (zoomLevel+12) + '&size=800x400';
for(i=0;i<checkMarkers.length;i++){
var colorArray=["blue","red","green","orange","yellow","purple","pink","brown","gray","white"];
if(markerColors){code+='&markers=color:' + colorArray[i] + '%7C';}
else{code+='&markers=color:blue%7C';}
if(showLabels){code+='label:' + markerNames[i] + '%7C';}
code += checkMarkers[i].replace(" ","").replace(" ","").replace(" ","");
}
code += '&maptype=' + mapType + '&sensor=false';
var linkURL = 'https://maps.google.com/?&t=p&z=' + (zoomLevel + 12) + '&q=' + checkMarkers[0].replace(" ","").replace(" ","");
document.getElementById("code").innerHTML="<hr /><table style='width:100%;'><tr><td style='width:50%;'><b>Generated Code:</b></td><td style='width:20%;text-align:right;'><a target='_blank' href=" + code + "><b>Preview</b></a></td></tr></table><br />";
document.getElementById("codeSpot").style.padding="5px";
document.getElementById("codeSpot").innerHTML='&lta href="' + linkURL + '"&gt;&lt;img src="' + code + '"&gt;&lt;a&gt;&lt;a href="http://birdventurebirding.com/"&gt;&lt;img src="https://lh3.googleusercontent.com/-5dHlsU3JLWM/UARfvvu80qI/AAAAAAAAA7M/ZWt0sUCNHoA/s89/tiny.png"&gt;&lt;/a&gt;';


document.getElementById("codeButton").value="Update";
document.getElementById("notes").innerHTML="Click code and press <span style='text-decoration:underline;'>Ctrl-C</span> (copy).  In eBird checklist comment, press <span style='text-decoration:underline;'>Ctrl-V</span> (paste).  Good luck!<br /><br /><b>eBirdGM is brought to you by <a href='http://www.birdventurebirding.com/'>Team Birdventure</a>.</b>" 
}
}








function clearText(id){
if(document.getElementById(id).value=="Latitude, Longitude"){
document.getElementById(id).value="";
var boxValue = document.getElementById(id).value="";
document.getElementById(id).style.color="rgb(10,10,10)";
document.getElementById(id).style.fontStyle="normal";
}
}


function regenerateText(id) {
if(document.getElementById(id).value==""){
document.getElementById(id).value="Latitude, Longitude";
document.getElementById(id).style.color="rgb(135,135,135)";
document.getElementById(id).style.fontStyle="italic";
document.getElementById("showAddMarker").innerHTML="";
}
}


var showMore = "false";
function addMarker(addMarkerDIV){
var showMore = "true";
addMarkerDIV.innerHTML="";
var markerNames=["D","E","F","G","H","I","J"];
html="";
for(i=0;i<7;i++){
html+='<table><tr><td style="width:80px;"><b>Marker ' + markerNames[i] + ':</b></td><td><input type="text" id="marker' + markerNames[i] + '" style="background:rgb(250,250,250);outline:none;border:none;color:rgb(10,10,10);width:230px;border-radius:10px;width:160px;padding:5px;" maxlength="25" /></td></tr></table>';
}
document.getElementById("markers").innerHTML=html;
}


function showValue(newValue)
{
var zoomValues = ["Very Low","Lower","Low","Normal","High","Higher","Very High"];
document.getElementById("zoomValue").innerHTML=zoomValues[newValue];
}


   function selectText() {
        if (document.selection) {
        var range = document.body.createTextRange();
            range.moveToElementText(document.getElementById('codeSpot'));
        range.select();
        }
        else if (window.getSelection) {
        var range = document.createRange();
        range.selectNode(document.getElementById('codeSpot'));
        window.getSelection().addRange(range);
        }
    }



</script>

Saturday, July 14

BirdTrax peaks 100,000 page views in 4 days!

Since BirdTrax was first introduced in the morning of July 10, it has been loaded a stunning 120,809 times in over 20 countries on websites, blogs, iGoogle homepages, iPhones, and Android phones, among many others. Here's the graph showing BirdTrax total pageview trends:

Friday, July 13

Embed Google Maps in eBird Checklist Comments!

View Checklist:  S10505942
How often haven't you bawled over a listserv post when you couldn't describe the location of the bird you saw? Finally you decided to just send everybody a set of latitude-longitude coordinates. Even then, to make sense of those numbers, your readers had to go plug them into Google Maps.

But technology is better than that. Just embed that Google Map into your eBird comment! Why not? It's easy, fast, and beautiful!

I've built an automated code generator below which spits out an image code you can copy into your eBird comments. You can now have a Google Map embedded in your checklists comments in less than 1 minute. It will look just like the checklist on the right.