Distance is a really important aspect of just about any kind of geographic analysis, and a really easy way to measure distances and to show them on a map is to use vector buffers. How buffers are created is pretty straightforward. If you think of a line segment, which is essentially two points connected by a line, you can draw a circle, or the software draws a circle, around the point at one end, then at the other, and then draws a rectangle around the line segment itself, and then dissolves that boundary to create the actual vector buffer. Now, you don't have to go through those steps yourself. That's what the software is doing. But I just wanted to show it to you so you can kind of visualize how this works. Once the vector buffer is complete, it creates what's known as an isoline. That just means a line of equal value. It's a generic term that can be applied to a lot of different things. So, it could be elevation, or air pressure, or whatever. In this case, it happens to be distance. So, for example, if we created a vector buffer of 100 meters, then this purple outline here as an isoline representing 100 meters, so that anywhere along that line, you know is 100 meters away from the original object. If we extend this idea to multiple segments, it's exactly the same thing. The software is drawing these circles around each of the points, and then rectangles around the segments, putting them together, dissolving it. So, even when you have these elaborate or complex-looking buffers, really, it's just based on these simple building blocks of the software is using. There are all kinds of reasons why you might want to create a buffer. Just some examples of applications would be perhaps protected zones around lakes and streams. Often, for example, there'll be a protected distance to keep cattle away from streams so that they don't contaminate it. You might have a zone of noise pollution around highways, walking distances to grocery stores. Distance is relevance to so many different things in geography. I couldn't even begin to list them all. So, it's something that I really highly encourage you to make sure you know how to use because it'll come in handy in all kinds of different ways. Let's go through some examples. So, here I have some libraries and schools, and we can measure distances from those. So, if you want to find the vector buffer tool, if you go into ArcToolbox and under the Analysis Tools in the Proximity toolbox, just think of these as like folders, you'll see the buffer tool there. You just double-click on it to open it, and you'll see this dialog box here. So, now my input for this is the library points. My output is going to be a new feature class called the buffer_750m, so for 750 meters, and then I'm going to input my linear units here. So, I want to create a vector buffer at a distance of 750 meters, and this is the result that I get. So, as you probably can gather, these blue lines here are exactly 750 meters away from school. There's different ways to think about this. For example, you could think anywhere that's inside that circle, you know is within a distance of 750 meters of a school. By the way, I don't know if you care, but yes, I actually did make the color of the buffer as the same color as the symbol for the libraries. I figure, "Hey, why not?" You know you're associating these distances to these objects, why not make it easy for people to see that connection or make that relationship clear? You don't have to do that. That's just me. You may also notice that it's created a separate buffer ring around each library. So, that's the ring for that library, that's the ring for this library, and so on. You can instead dissolve the boundary for that. All you have to do is select the Dissolve Type All. What that will do is, when it creates them, it will dissolve that boundary so that you'll only get the outside part of it. Especially if you're interested in just being able to show what areas are within a certain distance of an object, then you may want to choose this option. You can also fill them in. They are polygons that exist in a new feature class. So, you can do anything with them that you would with any other kind of polygon. So, I just filled them in here, and I made them semi-transparent so you can see what's underneath just to give you a sense of how you can show these and what options might be available. There's also a multiple ring buffer. So, this is actually a different tool in the same toolbox. I'm using the same input features. I'm going to create a new feature class. The only difference here is that you can add multiple distances. They don't all have to be the same. You can make them whatever intervals you want, and that can be useful if you're trying to show, arrange, or gradation of distances for a particular purpose. Maybe it has to do with walking distances, and some people are willing to walk farther than others, whatever it happens to be. So, you get this result here. So, you can see in my table or in the legend that we have 750, 500, and 250, and so those are the distances that we're showing here. We can do the same thing for lines. So, here I'm just going to do rivers and creeks, and I'm going to make a distance of 750 meters as a buffer around those. So, that's just exactly the same idea, except now it's around these creeks instead of around points. Again, they're polygons. You can do what you want with them. Lastly, I'll just show you buffers around polygons. So, what I'm going to do here is do buffers around the park polygons. Huh! Interesting. When I do that, when I select these and show the rail lines, you'll notice that within this one park here, this happens to be High Park in Toronto, there are different polygons that make up this one park. Interesting. So, suppose we wanted to show distances from large parks. If we do that, then each of these will be considered a separate park, even though they're actually part of the same part, because they've been cut up into these smaller polygon. So, I'm just inserting this as a scenario or something where you might need to deal with this kind of thing. Obviously, you don't have to do this every time you make a buffer, but I want to give you something that's maybe a little more realistic. So, what we can do is dissolve the internal boundaries inside the parks to get rid of those. I'm going to do it based on category. So, you can see here that we have these categories called Open Spaces. So, we can use that. When I do that, now I've got something that makes a little more sense. I've got polygons, where we have one polygon for all of this park here instead of a bunch of smaller ones that have cut it up. So, now I've got areas for these, and I can use that to select the larger areas if I want to. Say, I'm looking at distance to larger parks, maybe for green space for various types of activities that people maybe want to enjoy, recreational activities. So, I'm just going to do a Select By Attribute here with a Shape_Area above one million square meters. So, I've created a selection. I'm going to create a buffer for my open space dissolve so those are the ones that I dissolved for 750 meters. Because I've already made a selection, the buffer will only be generated for the selected features. This is not something that's widely advertised, it may not be obvious to you at first, but once you know that it's there it's actually a pretty handy feature to know that if you want to you could isolate certain things and then just create buffers for those. So, now I have buffers only for the large polygons, so you'll notice that this polygon is selected, you can tell by the color there, this polygon is not and so I have a buffer from there but not from there. Just another example of a scenario, where you can apply a buffer on a different way. Sometimes what's really useful is to be able to apply a different sized buffer based on the type of feature that is inside your dataset. So for example, here we have different types of roads that are classified as things like Major Arterial, Minor Arterial, Collector, Local, Laneway, and other. If you were measuring distances from these, maybe it has to do with concentrations of air pollution, or it could have to do with the amount of noise based on traffic. It may be that you want to show different distances based on different road types. So there's different ways that you could do that. You could actually go in and select each of these separately, manually, and then create a buffer manually to do that. You could reclassify these and then apply a buffer that way. I'm going to show you how this could work, and introduce some other ideas in here just to kind of show you a different type of workflow that you may not have come across before. Here we have the attribute table for this dataset, and you can see that there are road names here. So for example university, and then the road type, so Arterial Local and so on. If we look at the buffer tool again, it's the same buffer tool I'm going to use the road classification data. I'm going to generate a new output. But now instead of specifying a linear unit which I had done before and in meters, instead I'm going to tell you to use one of the fields in the table in order to generate the buffer distances from that. So, you'll notice that in my attribute table right now, I don't have any field that specifies buffer distances for each road type. So, there's different ways we can do this as I was saying. So, I could select all of them and reclassified or do something like that, but I'm going to show you a little kind of a shortcut that might be a more straightforward method. What if we have a second table that we create that you can literally just go into a file geodatabase right-click say new table, add a field and start editing this literally would take you a couple of minutes to put this together. But why would I want to do this? Well, the thing here is that, imagine if I didn't use this lookup table, let me back up for a second. Let's say that I wanted to create a buffer distances here, I put in this table, so these are going to be my distances and for major arterial it's going to be 100 meters. For local it's going to be 15 meters. For collector it is going to be 75 meters and so on. So, I could manually type all those in and then use my buffer tool. But you'll notice that there's 1100 selected features in this dataset and that's not even that big. There are datasets that are thousands and thousands of features and imagine if you had to go in and type in manually every one of those buffer distances, that would take ages. So, a second option if you are familiar with reclassification is you could select all of the features that have a certain class, you could then do a field calculation and say I want all of the, select all the Major Arterials and then do a few calculation just on those. So, that's a second method you could use. But a third method which I prefer here, is that if you want to go in and change these easily. So, imagine if you did type all of these in and then you're doing this for your boss or something and then they changed their mind, and they say oh actually when I said Major Arterial I wanted it to be 125 not 100, you'd have to go manually change all of those. Or even if you had to do the reclassification, you'd have to change all those. But if you use this method, the lookup table method, you don't have to do that. So let me show you. If we join these two tables together, and we use this as the primary key, and this is the foreign key. What we're going to do is join those two together. So we have Major Arterial road here, and what's going to happen is we're going to join that to every entry in this table that says Major Arterial, there'll be a new column and we will automatically join those together for every one that matches. Let me show you and so actually this is one of these situations where I think it's easier to look at it and see it than for me to explain it. I'm going to do a join attributes from a table, and basically use a very simple kind of join based on type, and the result is that I've joined these two tables together, I now have this is still the road classification table and this is the data from the original row classification here. This is the data from the lookup table here. But notice what's happened is that now we have a distance field that's been populated for every value that I have at my table because it's matched it up to every feature, every classified feature or class of feature let's say in my road data. So, what's the advantage here? If I need to go back and change these later, all I have to do is change the value in the lookup table once, join those again, and then it will automatically apply all of the edited or updated values to the road classification joined version of it, and then I can apply that buffer. So, let me show you how this works. If I go into the buffer tool, and now I'm going to specify my joined lookup table distance. These are the buffers that result from that. So we would call this a buffer by road type or more generically buffer by attribute, and so the great thing about this is that like I said, if you wanted to go back and change that, you could easily change it in the lookup table, join them again, do a new buffer by attribute, and it will literally take you maybe a couple of minutes instead of going in and having to do them manually. I just want to make it clear that when you're doing buffers or even if you're doing buffer by attribute, you do not have to use a lookup table. It's not at all mandatory. It's just something I added in as an extra explanation. Lookup tables get used in lots of different ways for different things. It's kind of just a trick, or a tool, or something you can add to your workflow depending on what you're doing for various reasons and I just thought this would be a good place to add it in so you can see how it works. So, we have a regular buffers, we have our buffers by an attribute and now you've seen how you can use a lookup table to simplify or streamline that workflow. How's the comparison? I just want to show you the difference between doing a Select by Location and using a Select by Buffer. If we use the Select by Location and we say that the target is going to be schools, and the source layer is library and I'm going to say are within a distance of the source layer of 750 meters, then behind the scenes invisibly without you knowing it, what the software is actually doing is generating buffers in order to be able to measure distances from schools to libraries, and then use that to complete the Select by Location query. So, when that's finished, you don't actually see any buffers. They're not stored permanently. They're not in any dataset anywhere, but they've only been created temporarily in order to complete that operation. So, that's one way of using distance in order to be able to select things. So, here are my schools. If I apply the Select by Location I have now selected the schools that are within the distance specified of a library. So, the result of that as a selection. No buffers are permanently stored. However, if I have created buffers that's a whole different thing I can then use those buffers as polygons. I can use them if I want to in terms of doing other things, I can show them visually, I can use them in overlay operations, I can use them for queries. Select by Location in other words. I could say, Select by Location all the schools that are inside these buffer polygons. So, I'm not saying that one's better than the other. It all really depends on what it is that you want as your output, and what option will work best for you, but I just wanted to make that comparison.