Is Buffer broken?

Thank you for your reply.  I understand what you are saying and will be converting the shape to a different projection before performing the buffer in order to achieve the results I desire.  I’ll make one last attempt to convey why I think the existing behavior is not desirable and then I’ll shut up on the subject.



I’ll provide two arguments, one a user expectations argument and one a technical one.



User Expectations:

I’m not saying your code is not working as designed.  I’m suggesting that your design is not as intuitive as it should be.  Obviously it’s your software and you can design it to function however you want, but I’m just going to offer my opinion on how I think a user would expect it to function.  As an experiment, go to one or more of the less-technical people on your team and tell them you have a Longitude, Latitude point somewhere in the world.  You want to create a 100 meter buffer around that point.  Depending on how non-technical they are you might have to explain what a buffer is…  Then ask them how far west of that point that 100 meter buffer should extend.  If they say 100 meters, then so far so good.  Now ask them how far north of that point the 100 meter buffer should extend, if they say “it depends on how far you are from the equator” then I think you’ve got an intuitive design.  If instead they say “100 meters” then I’d suggest the existing behavior is not doing what users would expect it to do and ideally the design should be changed.



Technical:

To create a 100 meter buffer around a longitude, latitude coordinate at 45 North latitude in decimal degrees it appears to do these two steps

1. Convert 100 meters to approximately .00127 degrees

2. Buffer the point by .00127 degrees



I’d argue that step #1 is not appropriate as while 100 meters may be approximately .00127 degrees of longitude at 45 north, it is NOT .00127  degrees of latitude; it is approximately .0009 degrees of latitude.  Choosing any one value (in decimal degrees) to use to represent 100 meters is just flat out inappropriate to do.  In reality, at 45 north latitude, the value is every number between .0009 and .00127 (approximately) depending on which direction the buffer is to extend.  It cannot be simplified down to a single value and picking any one value between .0009 and .00127, while doing so is certainly expedient, will not result in creating a 100 meter buffer except for in the particular directions that match the value chosen.  I would argue that if the algorithm you are using requires you to choose a single value for 100 meters expressed in degrees, that it was an error to use that algorithm; instead it should have been abandoned for something which doesn’t rely on an invalid assumption.