# Is Buffer broken?

**URL:** <https://community.thinkgeo.com/t/is-buffer-broken/7192>\
**Category:** Services\
**Created:** [March 2, 2016, 5:32pm UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192 "2016-03-02T17:32:16Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![John1](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/j/e9bcb4/32.png) [@John1](https://community.thinkgeo.com/u/John1)\
**Post date:** [March 2, 2016, 5:32pm UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/1 "2016-03-02T17:32:16Z")

</div>

I&nbsp;have&nbsp;data&nbsp;stored&nbsp;in&nbsp;geographic&nbsp;coordinates.&nbsp;&nbsp;I’m&nbsp;attempting&nbsp;to&nbsp;create&nbsp;a&nbsp;buffer&nbsp;using&nbsp;ThinkGeo&nbsp;Map&nbsp;Suite&nbsp;Services&nbsp;Edition&nbsp;9.0.&nbsp;&nbsp;If&nbsp;I&nbsp;start&nbsp;with&nbsp;a&nbsp;MultiLineShape&nbsp;and&nbsp;buffer&nbsp;it&nbsp;by&nbsp;a&nbsp;certain&nbsp;amount&nbsp;such&nbsp;as&nbsp;the&nbsp;following  
  
  
  
newAreaBaseShape&nbsp;=&nbsp;myLineShape.Buffer(200,&nbsp;8,&nbsp;BufferCapType.Round,&nbsp;ThinkGeo.MapSuite.Core.GeographyUnit.DecimalDegree,&nbsp;ThinkGeo.MapSuite.Core.DistanceUnit.Feet)  
  
  
  
I’d&nbsp;expect&nbsp;to&nbsp;get&nbsp;a&nbsp;buffer&nbsp;shape&nbsp;that&nbsp;is&nbsp;400&nbsp;feet&nbsp;wide&nbsp;around&nbsp;that&nbsp;line&nbsp;(200&nbsp;feet&nbsp;on&nbsp;each&nbsp;side&nbsp;of&nbsp;the&nbsp;line).&nbsp;&nbsp;And&nbsp;that’s&nbsp;exactly&nbsp;what&nbsp;I&nbsp;get&nbsp;on&nbsp;vertical&nbsp;lines,&nbsp;but&nbsp;on&nbsp;horizontal&nbsp;lines&nbsp;I’m&nbsp;getting&nbsp;something&nbsp;much&nbsp;wider,&nbsp;as&nbsp;if&nbsp;the&nbsp;math&nbsp;being&nbsp;performed&nbsp;behind&nbsp;the&nbsp;scenes&nbsp;is&nbsp;treating&nbsp;a&nbsp;degree&nbsp;of&nbsp;longitude&nbsp;as&nbsp;being&nbsp;equal&nbsp;to&nbsp;a&nbsp;degree&nbsp;in&nbsp;latitude&nbsp;as&nbsp;opposed&nbsp;to&nbsp;being&nbsp;considerably&nbsp;different&nbsp;in&nbsp;size.&nbsp;&nbsp;I&nbsp;think&nbsp;I&nbsp;can&nbsp;work&nbsp;around&nbsp;this&nbsp;by&nbsp;converting&nbsp;my&nbsp;shape&nbsp;to&nbsp;another&nbsp;projection,&nbsp;such&nbsp;as&nbsp;UTM,&nbsp;performing&nbsp;the&nbsp;buffer,&nbsp;and&nbsp;then&nbsp;convert&nbsp;the&nbsp;result&nbsp;back&nbsp;to&nbsp;geographic,&nbsp;but&nbsp;it&nbsp;seems&nbsp;like&nbsp;if&nbsp;telling&nbsp;Map&nbsp;Suite&nbsp;to&nbsp;create&nbsp;a&nbsp;200&nbsp;foot&nbsp;buffer&nbsp;around&nbsp;a&nbsp;shape&nbsp;whose&nbsp;coordinates&nbsp;are&nbsp;in&nbsp;decimal&nbsp;degrees,&nbsp;it&nbsp;should&nbsp;actually&nbsp;create&nbsp;a&nbsp;200&nbsp;foot&nbsp;buffer&nbsp;as&nbsp;opposed&nbsp;to&nbsp;a&nbsp;buffer&nbsp;of&nbsp;a&nbsp;fraction&nbsp;of&nbsp;a&nbsp;decimal&nbsp;degree&nbsp;in&nbsp;width.  
  
  
  
I’ve&nbsp;attached&nbsp;a&nbsp;picture&nbsp;of&nbsp;the&nbsp;results&nbsp;of&nbsp;buffering&nbsp;by&nbsp;200&nbsp;ft&nbsp;the&nbsp;line&nbsp;representing&nbsp;the&nbsp;outer&nbsp;ring&nbsp;of&nbsp;a&nbsp;rectangular&nbsp;polygon&nbsp;located&nbsp;approximately&nbsp;48&nbsp;degrees&nbsp;North&nbsp;Latitude.&nbsp;&nbsp;The&nbsp;vertical&nbsp;edge&nbsp;was&nbsp;actually&nbsp;buffered&nbsp;by&nbsp;that&nbsp;200&nbsp;feet,&nbsp;but&nbsp;the&nbsp;horizontal&nbsp;edges&nbsp;were&nbsp;buffered&nbsp;by&nbsp;almost&nbsp;300.

 ![](https://community.thinkgeo.com/uploads/default/original/2X/8/8b1643b0e51cc41ddace3efe169dc4ddb6e615fc.png)

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [March 2, 2016, 8:27pm UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/2 "2016-03-02T20:27:01Z")

</div>

Hi&nbsp;John,&nbsp;  
&nbsp;&nbsp;  
&nbsp;So&nbsp;what’s&nbsp;your&nbsp;projection&nbsp;you&nbsp;are&nbsp;using&nbsp;now&nbsp;for&nbsp;your&nbsp;scenario?&nbsp;I&nbsp;want&nbsp;to&nbsp;try&nbsp;to&nbsp;reproduce&nbsp;that&nbsp;and&nbsp;find&nbsp;what’s&nbsp;the&nbsp;reason.&nbsp;  
&nbsp;&nbsp;  
&nbsp;And&nbsp;it&nbsp;looks&nbsp;your&nbsp;parameter&nbsp;in&nbsp;sample&nbsp;code&nbsp;use&nbsp;ThinkGeo.MapSuite.Core.GeographyUnit.DecimalDegree,&nbsp;I&nbsp;think&nbsp;if&nbsp;here&nbsp;you&nbsp;are&nbsp;in&nbsp;some&nbsp;other&nbsp;projection&nbsp;like&nbsp;900913&nbsp;you&nbsp;should&nbsp;want&nbsp;modify&nbsp;this&nbsp;parameter&nbsp;also.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don

---

<div class="post-metadata">

**Author:** ![John1](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/j/e9bcb4/32.png) [@John1](https://community.thinkgeo.com/u/John1)\
**Post date:** [March 2, 2016, 10:19pm UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/3 "2016-03-02T22:19:51Z")

</div>

The&nbsp;following&nbsp;is&nbsp;my&nbsp;projection&nbsp;string&nbsp;  
&nbsp;&nbsp;  
&nbsp;“+proj=longlat&nbsp;+ellps=GRS80&nbsp;+datum=NAD83&nbsp;+no\_defs”&nbsp;  
&nbsp;&nbsp;  
&nbsp;The&nbsp;coordinates&nbsp;are&nbsp;latitude/longitude&nbsp;decimal&nbsp;degrees,&nbsp;so&nbsp;that&nbsp;parameter&nbsp;in&nbsp;my&nbsp;code&nbsp;is&nbsp;correct&nbsp;in&nbsp;saying&nbsp;that&nbsp;my&nbsp;geography&nbsp;units&nbsp;are&nbsp;decimal&nbsp;degrees.&nbsp;What&nbsp;I’m&nbsp;attempting&nbsp;to&nbsp;convey&nbsp;is&nbsp;that&nbsp;a&nbsp;buffer&nbsp;should&nbsp;be&nbsp;performed&nbsp;in&nbsp;the&nbsp;distance&nbsp;and&nbsp;distance&nbsp;units&nbsp;specified&nbsp;as&nbsp;it&nbsp;makes&nbsp;no&nbsp;sense&nbsp;to&nbsp;perform&nbsp;a&nbsp;buffer&nbsp;in&nbsp;decimal&nbsp;degrees&nbsp;as&nbsp;a&nbsp;degree&nbsp;in&nbsp;latitude&nbsp;does&nbsp;not&nbsp;equal&nbsp;a&nbsp;degree&nbsp;in&nbsp;longitude.&nbsp;&nbsp;I’ve&nbsp;chosen&nbsp;to&nbsp;display&nbsp;the&nbsp;data&nbsp;in&nbsp;a&nbsp;conic&nbsp;conformal&nbsp;projection&nbsp;in&nbsp;the&nbsp;map&nbsp;above&nbsp;but&nbsp;that’s&nbsp;just&nbsp;for&nbsp;display,&nbsp;the&nbsp;data&nbsp;is&nbsp;stored&nbsp;(and&nbsp;the&nbsp;buffer&nbsp;is&nbsp;performed)&nbsp;in&nbsp;the&nbsp;projection&nbsp;I&nbsp;specify&nbsp;above.&nbsp;  
&nbsp;&nbsp;  
&nbsp;I&nbsp;could&nbsp;reproject&nbsp;my&nbsp;shape&nbsp;to&nbsp;a&nbsp;different&nbsp;projection&nbsp;in&nbsp;which&nbsp;one&nbsp;unit&nbsp;in&nbsp;the&nbsp;north-south&nbsp;direction&nbsp;is&nbsp;approximately&nbsp;equal&nbsp;to&nbsp;one&nbsp;unit&nbsp;in&nbsp;the&nbsp;east-west&nbsp;direction&nbsp;and&nbsp;thereby&nbsp;work&nbsp;around&nbsp;the&nbsp;issue.&nbsp;&nbsp;I&nbsp;just&nbsp;figured&nbsp;I&nbsp;should&nbsp;report&nbsp;the&nbsp;issue&nbsp;so&nbsp;that&nbsp;you&nbsp;know&nbsp;about&nbsp;it&nbsp;and&nbsp;hopefully&nbsp;fix&nbsp;it,&nbsp;but&nbsp;if&nbsp;you&nbsp;choose&nbsp;not&nbsp;to&nbsp;fix&nbsp;it&nbsp;at&nbsp;least&nbsp;others&nbsp;who&nbsp;run&nbsp;into&nbsp;the&nbsp;same&nbsp;issue&nbsp;I&nbsp;did&nbsp;will&nbsp;know&nbsp;there&nbsp;is&nbsp;an&nbsp;issue&nbsp;they&nbsp;need&nbsp;to&nbsp;work&nbsp;around.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Thanks,&nbsp;  
&nbsp;John

---

<div class="post-metadata">

**Author:** ![John1](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/j/e9bcb4/32.png) [@John1](https://community.thinkgeo.com/u/John1)\
**Post date:** [March 3, 2016, 2:58pm UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/4 "2016-03-03T14:58:02Z")

</div>

Here’s&nbsp;a&nbsp;short&nbsp;snippet&nbsp;of&nbsp;sample&nbsp;code&nbsp;to&nbsp;demonstrate&nbsp;what&nbsp;I’m&nbsp;saying…&nbsp;

> `class`&nbsp;`Program`  
> `{`  
> `static`&nbsp;`void`&nbsp;`Main(``string``[] args)`  
> `{`  
> `PointBaseShape pointOnEquator = ``new`&nbsp;`PointShape(0,0);`  
> `AreaBaseShape bufferPolygonOnEquator = pointOnEquator.Buffer(200, GeographyUnit.DecimalDegree, DistanceUnit.Meter);`  
> `double`&nbsp;`areaOnEquator = bufferPolygonOnEquator.GetArea(GeographyUnit.DecimalDegree, AreaUnit.SquareMeters);`  
> `Console.WriteLine(``"Area on equator = "`&nbsp;`+ areaOnEquator);`  
> `PointBaseShape pointAt45North = new PointShape(0, 45);AreaBaseShape bufferPolygonAt45North = pointAt45North.Buffer(200, GeographyUnit.DecimalDegree, DistanceUnit.Meter);double areaAt45North = bufferPolygonAt45North.GetArea(GeographyUnit.DecimalDegree, AreaUnit.SquareMeters);Console.WriteLine("Area at 45 North = " + areaAt45North);PointBaseShape pointAt80North = new PointShape(0, 80);AreaBaseShape bufferPolygonAt80North = pointAt80North.Buffer(200, GeographyUnit.DecimalDegree, DistanceUnit.Meter);double areaAt80North = bufferPolygonAt80North.GetArea(GeographyUnit.DecimalDegree, AreaUnit.SquareMeters);Console.WriteLine("Area at 80 North = " + areaAt80North);Console.WriteLine("All Done ");}}`

`Creating a 200 meter buffer around a point should produce a circle of PI * (200 meters)^2 or approximately 125,663 square meters.  The Buffer function is not creating a buffer 200 meters in size, rather it appears to be taking 200 meters, converting that to decimal degrees, and then creating a buffer of that amount of decimal degrees around the point.  So, in effect creating an oval around the point as opposed to a circle around the point with the farther north one is the taller that oval becomes.  Area on equator = 124857.795932134Area at 45 North = 176575.588453293Area at 80 North = 719027.260787964  So we see that on the equator we get approximately a circle and approximately the area we would expect.  The farther we move north the more pronounced the oval and consequently the larger the area.`

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [March 4, 2016, 3:47am UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/5 "2016-03-04T03:47:13Z")

</div>

Hi&nbsp;John,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Thanks&nbsp;for&nbsp;your&nbsp;share.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Our&nbsp;Buffer&nbsp;should&nbsp;works&nbsp;like&nbsp;this:&nbsp;build&nbsp;a&nbsp;standard&nbsp;round&nbsp;based&nbsp;on&nbsp;the&nbsp;center&nbsp;point,&nbsp;so&nbsp;if&nbsp;you&nbsp;want&nbsp;to&nbsp;buffer&nbsp;a&nbsp;shape,&nbsp;you&nbsp;should&nbsp;want&nbsp;to&nbsp;convert&nbsp;the&nbsp;base&nbsp;shape&nbsp;to&nbsp;the&nbsp;rendering&nbsp;projection&nbsp;before&nbsp;buffer.&nbsp;  
&nbsp;&nbsp;  
&nbsp;As&nbsp;below&nbsp;is&nbsp;my&nbsp;test&nbsp;code,&nbsp;which&nbsp;render&nbsp;a&nbsp;standard&nbsp;round&nbsp;in&nbsp;projection&nbsp;900913,&nbsp;I&nbsp;think&nbsp;that&nbsp;should&nbsp;also&nbsp;works&nbsp;for&nbsp;your&nbsp;projection:&nbsp;  
&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;`  ManagedProj4Projection proj4 = new ManagedProj4Projection();            proj4.InternalProjectionParametersString = ManagedProj4Projection.GetWgs84ParametersString();            proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetGoogleMapParametersString();            proj4.Open();            PointBaseShape p = new PointShape(0, 80);            p = proj4.ConvertToExternalProjection§ as PointBaseShape;            MultipolygonShape poly = p.Buffer(200, GeographyUnit.Meter, DistanceUnit.Meter);            InMemoryFeatureLayer layer = new InMemoryFeatureLayer();            layer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;            layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;            layer.InternalFeatures.Add(new Feature(poly));            layer.Open();            LayerOverlay overlay = new LayerOverlay();            overlay.Layers.Add(layer);            winformsMap1.Overlays.Add(overlay);            winformsMap1.CurrentExtent = layer.GetBoundingBox();            winformsMap1.MapUnit = GeographyUnit.Meter;            winformsMap1.Refresh();`&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don

---

<div class="post-metadata">

**Author:** ![John1](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/j/e9bcb4/32.png) [@John1](https://community.thinkgeo.com/u/John1)\
**Post date:** [March 4, 2016, 10:46am UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/6 "2016-03-04T10:46:54Z")

</div>

Thank&nbsp;you&nbsp;for&nbsp;your&nbsp;reply.&nbsp;&nbsp;I&nbsp;understand&nbsp;what&nbsp;you&nbsp;are&nbsp;saying&nbsp;and&nbsp;will&nbsp;be&nbsp;converting&nbsp;the&nbsp;shape&nbsp;to&nbsp;a&nbsp;different&nbsp;projection&nbsp;before&nbsp;performing&nbsp;the&nbsp;buffer&nbsp;in&nbsp;order&nbsp;to&nbsp;achieve&nbsp;the&nbsp;results&nbsp;I&nbsp;desire.&nbsp;&nbsp;I’ll&nbsp;make&nbsp;one&nbsp;last&nbsp;attempt&nbsp;to&nbsp;convey&nbsp;why&nbsp;I&nbsp;think&nbsp;the&nbsp;existing&nbsp;behavior&nbsp;is&nbsp;not&nbsp;desirable&nbsp;and&nbsp;then&nbsp;I’ll&nbsp;shut&nbsp;up&nbsp;on&nbsp;the&nbsp;subject.  
  
  
  
I’ll&nbsp;provide&nbsp;two&nbsp;arguments,&nbsp;one&nbsp;a&nbsp;user&nbsp;expectations&nbsp;argument&nbsp;and&nbsp;one&nbsp;a&nbsp;technical&nbsp;one.  
  
  
  
User&nbsp;Expectations:  
  
I’m&nbsp;not&nbsp;saying&nbsp;your&nbsp;code&nbsp;is&nbsp;not&nbsp;working&nbsp;as&nbsp;designed.&nbsp;&nbsp;I’m&nbsp;suggesting&nbsp;that&nbsp;your&nbsp;design&nbsp;is&nbsp;not&nbsp;as&nbsp;intuitive&nbsp;as&nbsp;it&nbsp;should&nbsp;be.&nbsp;&nbsp;Obviously&nbsp;it’s&nbsp;your&nbsp;software&nbsp;and&nbsp;you&nbsp;can&nbsp;design&nbsp;it&nbsp;to&nbsp;function&nbsp;however&nbsp;you&nbsp;want,&nbsp;but&nbsp;I’m&nbsp;just&nbsp;going&nbsp;to&nbsp;offer&nbsp;my&nbsp;opinion&nbsp;on&nbsp;how&nbsp;I&nbsp;think&nbsp;a&nbsp;user&nbsp;would&nbsp;expect&nbsp;it&nbsp;to&nbsp;function.&nbsp;&nbsp;As&nbsp;an&nbsp;experiment,&nbsp;go&nbsp;to&nbsp;one&nbsp;or&nbsp;more&nbsp;of&nbsp;the&nbsp;less-technical&nbsp;people&nbsp;on&nbsp;your&nbsp;team&nbsp;and&nbsp;tell&nbsp;them&nbsp;you&nbsp;have&nbsp;a&nbsp;Longitude,&nbsp;Latitude&nbsp;point&nbsp;somewhere&nbsp;in&nbsp;the&nbsp;world.&nbsp;&nbsp;You&nbsp;want&nbsp;to&nbsp;create&nbsp;a&nbsp;100&nbsp;meter&nbsp;buffer&nbsp;around&nbsp;that&nbsp;point.&nbsp;&nbsp;Depending&nbsp;on&nbsp;how&nbsp;non-technical&nbsp;they&nbsp;are&nbsp;you&nbsp;might&nbsp;have&nbsp;to&nbsp;explain&nbsp;what&nbsp;a&nbsp;buffer&nbsp;is…&nbsp;&nbsp;Then&nbsp;ask&nbsp;them&nbsp;how&nbsp;far&nbsp;west&nbsp;of&nbsp;that&nbsp;point&nbsp;that&nbsp;100&nbsp;meter&nbsp;buffer&nbsp;should&nbsp;extend.&nbsp;&nbsp;If&nbsp;they&nbsp;say&nbsp;100&nbsp;meters,&nbsp;then&nbsp;so&nbsp;far&nbsp;so&nbsp;good.&nbsp;&nbsp;Now&nbsp;ask&nbsp;them&nbsp;how&nbsp;far&nbsp;north&nbsp;of&nbsp;that&nbsp;point&nbsp;the&nbsp;100&nbsp;meter&nbsp;buffer&nbsp;should&nbsp;extend,&nbsp;if&nbsp;they&nbsp;say&nbsp;“it&nbsp;depends&nbsp;on&nbsp;how&nbsp;far&nbsp;you&nbsp;are&nbsp;from&nbsp;the&nbsp;equator”&nbsp;then&nbsp;I&nbsp;think&nbsp;you’ve&nbsp;got&nbsp;an&nbsp;intuitive&nbsp;design.&nbsp;&nbsp;If&nbsp;instead&nbsp;they&nbsp;say&nbsp;“100&nbsp;meters”&nbsp;then&nbsp;I’d&nbsp;suggest&nbsp;the&nbsp;existing&nbsp;behavior&nbsp;is&nbsp;not&nbsp;doing&nbsp;what&nbsp;users&nbsp;would&nbsp;expect&nbsp;it&nbsp;to&nbsp;do&nbsp;and&nbsp;ideally&nbsp;the&nbsp;design&nbsp;should&nbsp;be&nbsp;changed.  
  
  
  
Technical:  
  
To&nbsp;create&nbsp;a&nbsp;100&nbsp;meter&nbsp;buffer&nbsp;around&nbsp;a&nbsp;longitude,&nbsp;latitude&nbsp;coordinate&nbsp;at&nbsp;45&nbsp;North&nbsp;latitude&nbsp;in&nbsp;decimal&nbsp;degrees&nbsp;it&nbsp;appears&nbsp;to&nbsp;do&nbsp;these&nbsp;two&nbsp;steps  
  
1.&nbsp;Convert&nbsp;100&nbsp;meters&nbsp;to&nbsp;approximately&nbsp;.00127&nbsp;degrees  
  
2.&nbsp;Buffer&nbsp;the&nbsp;point&nbsp;by&nbsp;.00127&nbsp;degrees  
  
  
  
I’d&nbsp;argue&nbsp;that&nbsp;step&nbsp;#1&nbsp;is&nbsp;not&nbsp;appropriate&nbsp;as&nbsp;while&nbsp;100&nbsp;meters&nbsp;may&nbsp;be&nbsp;approximately&nbsp;.00127&nbsp;degrees&nbsp;of&nbsp;longitude&nbsp;at&nbsp;45&nbsp;north,&nbsp;it&nbsp;is&nbsp;NOT&nbsp;.00127&nbsp;&nbsp;degrees&nbsp;of&nbsp;latitude;&nbsp;it&nbsp;is&nbsp;approximately&nbsp;.0009&nbsp;degrees&nbsp;of&nbsp;latitude.&nbsp;&nbsp;Choosing&nbsp;any&nbsp;one&nbsp;value&nbsp;(in&nbsp;decimal&nbsp;degrees)&nbsp;to&nbsp;use&nbsp;to&nbsp;represent&nbsp;100&nbsp;meters&nbsp;is&nbsp;just&nbsp;flat&nbsp;out&nbsp;inappropriate&nbsp;to&nbsp;do.&nbsp;&nbsp;In&nbsp;reality,&nbsp;at&nbsp;45&nbsp;north&nbsp;latitude,&nbsp;the&nbsp;value&nbsp;is&nbsp;every&nbsp;number&nbsp;between&nbsp;.0009&nbsp;and&nbsp;.00127&nbsp;(approximately)&nbsp;depending&nbsp;on&nbsp;which&nbsp;direction&nbsp;the&nbsp;buffer&nbsp;is&nbsp;to&nbsp;extend.&nbsp;&nbsp;It&nbsp;cannot&nbsp;be&nbsp;simplified&nbsp;down&nbsp;to&nbsp;a&nbsp;single&nbsp;value&nbsp;and&nbsp;picking&nbsp;any&nbsp;one&nbsp;value&nbsp;between&nbsp;.0009&nbsp;and&nbsp;.00127,&nbsp;while&nbsp;doing&nbsp;so&nbsp;is&nbsp;certainly&nbsp;expedient,&nbsp;will&nbsp;not&nbsp;result&nbsp;in&nbsp;creating&nbsp;a&nbsp;100&nbsp;meter&nbsp;buffer&nbsp;except&nbsp;for&nbsp;in&nbsp;the&nbsp;particular&nbsp;directions&nbsp;that&nbsp;match&nbsp;the&nbsp;value&nbsp;chosen.&nbsp;&nbsp;I&nbsp;would&nbsp;argue&nbsp;that&nbsp;if&nbsp;the&nbsp;algorithm&nbsp;you&nbsp;are&nbsp;using&nbsp;requires&nbsp;you&nbsp;to&nbsp;choose&nbsp;a&nbsp;single&nbsp;value&nbsp;for&nbsp;100&nbsp;meters&nbsp;expressed&nbsp;in&nbsp;degrees,&nbsp;that&nbsp;it&nbsp;was&nbsp;an&nbsp;error&nbsp;to&nbsp;use&nbsp;that&nbsp;algorithm;&nbsp;instead&nbsp;it&nbsp;should&nbsp;have&nbsp;been&nbsp;abandoned&nbsp;for&nbsp;something&nbsp;which&nbsp;doesn’t&nbsp;rely&nbsp;on&nbsp;an&nbsp;invalid&nbsp;assumption.

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [March 7, 2016, 12:34am UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/7 "2016-03-07T00:34:03Z")

</div>

Hi&nbsp;John,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Thanks&nbsp;very&nbsp;much&nbsp;for&nbsp;discuss&nbsp;about&nbsp;our&nbsp;API&nbsp;with&nbsp;us,&nbsp;that’s&nbsp;very&nbsp;helpful&nbsp;for&nbsp;make&nbsp;our&nbsp;product&nbsp;get&nbsp;better.&nbsp;  
&nbsp;&nbsp;  
&nbsp;I&nbsp;am&nbsp;really&nbsp;sorry&nbsp;I&nbsp;hadn’t&nbsp;reply&nbsp;you&nbsp;so&nbsp;detail&nbsp;and&nbsp;maybe&nbsp;I&nbsp;hadn’t&nbsp;think&nbsp;this&nbsp;problem&nbsp;more&nbsp;detail,&nbsp;and&nbsp;because&nbsp;I&nbsp;am&nbsp;also&nbsp;not&nbsp;the&nbsp;API&nbsp;designer&nbsp;so&nbsp;maybe&nbsp;my&nbsp;thinking&nbsp;is&nbsp;not&nbsp;without&nbsp;error.&nbsp;That’s&nbsp;a&nbsp;good&nbsp;discussion&nbsp;here,&nbsp;I&nbsp;will&nbsp;let&nbsp;our&nbsp;development&nbsp;team&nbsp;knows&nbsp;it&nbsp;and&nbsp;they&nbsp;maybe&nbsp;can&nbsp;get&nbsp;more&nbsp;from&nbsp;our&nbsp;talking.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Here&nbsp;is&nbsp;my&nbsp;detail&nbsp;thinking&nbsp;about&nbsp;this&nbsp;problem:&nbsp;  
&nbsp;&nbsp;  
&nbsp;1.&nbsp;Because&nbsp;our&nbsp;map&nbsp;is&nbsp;a&nbsp;control&nbsp;and&nbsp;most&nbsp;of&nbsp;our&nbsp;user&nbsp;is&nbsp;developer,&nbsp;so&nbsp;I&nbsp;think&nbsp;our&nbsp;API&nbsp;designer&nbsp;thought&nbsp;like&nbsp;a&nbsp;coder&nbsp;and&nbsp;default&nbsp;think&nbsp;our&nbsp;user&nbsp;have&nbsp;basic&nbsp;GIS&nbsp;tech.&nbsp;Here&nbsp;I&nbsp;have&nbsp;a&nbsp;question&nbsp;about&nbsp;your&nbsp;fist&nbsp;image,&nbsp;sorry&nbsp;I&nbsp;hadn’t&nbsp;ask&nbsp;about&nbsp;that&nbsp;before,&nbsp;it&nbsp;looks&nbsp;you&nbsp;mark&nbsp;the&nbsp;right&nbsp;side&nbsp;about&nbsp;200ft&nbsp;and&nbsp;the&nbsp;bottom&nbsp;side&nbsp;about&nbsp;298ft,&nbsp;and&nbsp;the&nbsp;projection&nbsp;should&nbsp;be&nbsp;“+proj=longlat&nbsp;+ellps=GRS80&nbsp;+datum=NAD83&nbsp;+no\_defs”,&nbsp;I&nbsp;want&nbsp;to&nbsp;know&nbsp;whether&nbsp;the&nbsp;200ft&nbsp;and&nbsp;298ft&nbsp;is&nbsp;screen&nbsp;distance&nbsp;or&nbsp;really&nbsp;distance.&nbsp;This&nbsp;just&nbsp;like&nbsp;GetDistance,&nbsp;I&nbsp;think&nbsp;for&nbsp;two&nbsp;points&nbsp;in&nbsp;GIS,&nbsp;if&nbsp;we&nbsp;need&nbsp;calculate&nbsp;a&nbsp;distance&nbsp;between&nbsp;two&nbsp;points,&nbsp;we&nbsp;need&nbsp;consider&nbsp;the&nbsp;projection&nbsp;information&nbsp;but&nbsp;cannot&nbsp;directly&nbsp;calculate&nbsp;the&nbsp;screen&nbsp;distance,&nbsp;just&nbsp;because&nbsp;for&nbsp;same&nbsp;two&nbsp;points,&nbsp;their&nbsp;distance&nbsp;looks&nbsp;different&nbsp;under&nbsp;different&nbsp;projection.&nbsp;So&nbsp;that’s&nbsp;why&nbsp;if&nbsp;you&nbsp;want&nbsp;to&nbsp;get&nbsp;a&nbsp;standard&nbsp;buffered&nbsp;area,&nbsp;you&nbsp;need&nbsp;reprojection&nbsp;the&nbsp;shape,&nbsp;orelse&nbsp;it&nbsp;calculate&nbsp;the&nbsp;buffer&nbsp;based&nbsp;on&nbsp;4326&nbsp;and&nbsp;it&nbsp;won’t&nbsp;looks&nbsp;correct&nbsp;just&nbsp;as&nbsp;you&nbsp;want.&nbsp;  
&nbsp;&nbsp;  
&nbsp;2.&nbsp;For&nbsp;your&nbsp;technical&nbsp;item,&nbsp;because&nbsp;we&nbsp;implement&nbsp;that&nbsp;by&nbsp;NTS&nbsp;library,&nbsp;so&nbsp;we&nbsp;cannot&nbsp;convert&nbsp;the&nbsp;distance&nbsp;to&nbsp;lonlat&nbsp;before&nbsp;pass&nbsp;that&nbsp;into&nbsp;the&nbsp;library.&nbsp;About&nbsp;this&nbsp;I&nbsp;think&nbsp;our&nbsp;developer&nbsp;can&nbsp;do&nbsp;further&nbsp;research.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Any&nbsp;question&nbsp;about&nbsp;our&nbsp;product&nbsp;please&nbsp;feel&nbsp;free&nbsp;to&nbsp;let&nbsp;us&nbsp;know.&nbsp;Thanks&nbsp;for&nbsp;your&nbsp;detail&nbsp;post&nbsp;again.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don

---

<div class="post-metadata">

**Author:** ![John1](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/j/e9bcb4/32.png) [@John1](https://community.thinkgeo.com/u/John1)\
**Post date:** [March 7, 2016, 7:15pm UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/8 "2016-03-07T19:15:36Z")

</div>

The&nbsp;projection&nbsp;of&nbsp;the&nbsp;Shapefile&nbsp;-&nbsp;how&nbsp;the&nbsp;data&nbsp;is&nbsp;stored&nbsp;-&nbsp;is&nbsp;“+proj=longlat&nbsp;+ellps=GRS80&nbsp;+datum=NAD83&nbsp;+no\_defs”&nbsp;so&nbsp;that&nbsp;we&nbsp;can&nbsp;store&nbsp;all&nbsp;the&nbsp;data&nbsp;for&nbsp;the&nbsp;United&nbsp;States&nbsp;in&nbsp;a&nbsp;single&nbsp;table&nbsp;(in&nbsp;SQL&nbsp;Server).&nbsp;&nbsp;We&nbsp;only&nbsp;work&nbsp;with&nbsp;the&nbsp;small&nbsp;subset&nbsp;for&nbsp;a&nbsp;single&nbsp;one&nbsp;of&nbsp;our&nbsp;insureds&nbsp;at&nbsp;a&nbsp;time,&nbsp;which&nbsp;we&nbsp;extract&nbsp;from&nbsp;SQL&nbsp;Server,&nbsp;and&nbsp;then&nbsp;write&nbsp;temporarily&nbsp;as&nbsp;Shapefile&nbsp;in&nbsp;our&nbsp;client&nbsp;application.&nbsp;&nbsp;The&nbsp;projection&nbsp;of&nbsp;the&nbsp;display&nbsp;to&nbsp;the&nbsp;user&nbsp;is&nbsp;a&nbsp;conic&nbsp;conformal&nbsp;projection&nbsp;with&nbsp;a&nbsp;Central&nbsp;Meridian&nbsp;reasonably&nbsp;close&nbsp;to&nbsp;the&nbsp;location&nbsp;being&nbsp;viewed.&nbsp;&nbsp;I&nbsp;think&nbsp;there&nbsp;may&nbsp;be&nbsp;some&nbsp;disconnect&nbsp;here&nbsp;due&nbsp;to&nbsp;the&nbsp;idea&nbsp;that&nbsp;this&nbsp;data&nbsp;needs&nbsp;projected.&nbsp;&nbsp;I&nbsp;would&nbsp;argue&nbsp;that&nbsp;we&nbsp;display&nbsp;the&nbsp;data&nbsp;to&nbsp;the&nbsp;user&nbsp;projected&nbsp;to&nbsp;conic&nbsp;conformal&nbsp;so&nbsp;it&nbsp;looks&nbsp;“right”&nbsp;to&nbsp;them&nbsp;(north&nbsp;is&nbsp;directly&nbsp;up&nbsp;and&nbsp;distances&nbsp;in&nbsp;x&nbsp;and&nbsp;y&nbsp;are&nbsp;visually&nbsp;equal),&nbsp;but&nbsp;the&nbsp;projection&nbsp;in&nbsp;which&nbsp;the&nbsp;data&nbsp;is&nbsp;displayed&nbsp;to&nbsp;the&nbsp;user&nbsp;is&nbsp;essentially&nbsp;irrelevant&nbsp;to&nbsp;the&nbsp;data&nbsp;itself.&nbsp;&nbsp;The&nbsp;data&nbsp;itself&nbsp;is&nbsp;a&nbsp;location&nbsp;on&nbsp;a&nbsp;somewhat-spherical-shaped&nbsp;planet.&nbsp;&nbsp;If&nbsp;I&nbsp;say&nbsp;“give&nbsp;me&nbsp;a&nbsp;100&nbsp;meter&nbsp;buffer”&nbsp;around&nbsp;a&nbsp;point,&nbsp;regardless&nbsp;of&nbsp;the&nbsp;projection&nbsp;in&nbsp;which&nbsp;that&nbsp;point&nbsp;is&nbsp;stored,&nbsp;I&nbsp;should&nbsp;get&nbsp;a&nbsp;100&nbsp;meter&nbsp;buffer,&nbsp;not&nbsp;a&nbsp;buffer&nbsp;that&nbsp;is&nbsp;100&nbsp;meters&nbsp;in&nbsp;some&nbsp;directions&nbsp;and&nbsp;a&nbsp;different&nbsp;distance&nbsp;in&nbsp;others.&nbsp;&nbsp;&nbsp;  
  
  
  
Take&nbsp;any&nbsp;popular&nbsp;GIS&nbsp;for&nbsp;instance.&nbsp;  
  
  
  
From&nbsp;my&nbsp;use&nbsp;of&nbsp;MapInfo&nbsp;back&nbsp;in&nbsp;the&nbsp;day&nbsp;all&nbsp;buffering&nbsp;I&nbsp;did&nbsp;was&nbsp;in&nbsp;meters&nbsp;or&nbsp;feet&nbsp;to&nbsp;data&nbsp;stored&nbsp;in&nbsp;geographic&nbsp;NAD83&nbsp;decimal&nbsp;degrees&nbsp;just&nbsp;like&nbsp;this&nbsp;and&nbsp;it&nbsp;would&nbsp;create&nbsp;a&nbsp;buffer&nbsp;of&nbsp;the&nbsp;distance&nbsp;(in&nbsp;meters&nbsp;or&nbsp;feet)&nbsp;that&nbsp;I&nbsp;specified,&nbsp;not&nbsp;attempt&nbsp;the&nbsp;invalid&nbsp;conversion&nbsp;to&nbsp;decimal&nbsp;degrees&nbsp;and&nbsp;then&nbsp;buffer&nbsp;by&nbsp;decimal&nbsp;degrees.&nbsp;  
  
  
  
From&nbsp;the&nbsp;ESRI&nbsp;online&nbsp;help&nbsp;one&nbsp;can&nbsp;see&nbsp;that&nbsp;they&nbsp;too,&nbsp;when&nbsp;asked&nbsp;to&nbsp;buffer&nbsp;data&nbsp;in&nbsp;a&nbsp;geographic&nbsp;coordinate&nbsp;system&nbsp;such&nbsp;as&nbsp;the&nbsp;NAD83&nbsp;I’m&nbsp;working&nbsp;with&nbsp;here&nbsp;and&nbsp;specifying&nbsp;a&nbsp;buffer&nbsp;distance&nbsp;in&nbsp;linear&nbsp;units&nbsp;(such&nbsp;as&nbsp;meters&nbsp;or&nbsp;feet)&nbsp;create&nbsp;a&nbsp;buffer&nbsp;of&nbsp;the&nbsp;linear&nbsp;units&nbsp;requested,&nbsp;not&nbsp;something&nbsp;else.&nbsp;Link&nbsp;to&nbsp;the&nbsp;ESRI&nbsp;help&nbsp;page:&nbsp;&nbsp;[resources.arcgis.com/en/help/main/10.2/index.html#//000800000019000000](http://resources.arcgis.com/en/help/main/10.2/index.html#//000800000019000000)&nbsp;  
  
  
  
QGIS&nbsp;takes&nbsp;a&nbsp;different&nbsp;tact&nbsp;in&nbsp;that&nbsp;they&nbsp;don’t&nbsp;allow&nbsp;you&nbsp;to&nbsp;specify&nbsp;units,&nbsp;instead&nbsp;all&nbsp;buffering&nbsp;is&nbsp;done&nbsp;in&nbsp;the&nbsp;units&nbsp;in&nbsp;which&nbsp;the&nbsp;data&nbsp;is&nbsp;stored&nbsp;thereby&nbsp;forcing&nbsp;you&nbsp;to&nbsp;reproject&nbsp;your&nbsp;data&nbsp;to&nbsp;a&nbsp;suitable&nbsp;projection&nbsp;before&nbsp;attempting&nbsp;a&nbsp;buffer&nbsp;as&nbsp;opposed&nbsp;to&nbsp;allowing&nbsp;you&nbsp;to&nbsp;enter&nbsp;values&nbsp;that&nbsp;it&nbsp;can’t&nbsp;correctly&nbsp;handle.&nbsp;  
  
  
  
I&nbsp;can&nbsp;see&nbsp;how&nbsp;relying&nbsp;on&nbsp;a&nbsp;3rd&nbsp;party&nbsp;library&nbsp;somewhat&nbsp;ties&nbsp;your&nbsp;hands.&nbsp;&nbsp;Although&nbsp;it&nbsp;would&nbsp;seem&nbsp;that&nbsp;if&nbsp;handed&nbsp;something&nbsp;you&nbsp;can’t&nbsp;handle,&nbsp;such&nbsp;as&nbsp;coordinate&nbsp;units&nbsp;of&nbsp;decimal&nbsp;degrees&nbsp;and&nbsp;distance&nbsp;units&nbsp;of&nbsp;meters,&nbsp;one&nbsp;could&nbsp;either&nbsp;return&nbsp;an&nbsp;error&nbsp;stating&nbsp;that&nbsp;it&nbsp;isn’t&nbsp;supported&nbsp;or&nbsp;better&nbsp;yet&nbsp;perform&nbsp;a&nbsp;conversion&nbsp;of&nbsp;the&nbsp;shape&nbsp;behind-the-scenes&nbsp;to&nbsp;a&nbsp;reasonable&nbsp;projection,&nbsp;compute&nbsp;the&nbsp;buffer&nbsp;by&nbsp;calling&nbsp;the&nbsp;3rd&nbsp;party&nbsp;library&nbsp;passing&nbsp;the&nbsp;projected&nbsp;shape,&nbsp;reverse-project&nbsp;the&nbsp;resulting&nbsp;buffer&nbsp;shape&nbsp;and&nbsp;hand&nbsp;back&nbsp;the&nbsp;results.

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [March 9, 2016, 4:19am UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/9 "2016-03-09T04:19:30Z")

</div>

Hi&nbsp;John,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Thanks&nbsp;for&nbsp;your&nbsp;detail&nbsp;reply,&nbsp;this&nbsp;is&nbsp;a&nbsp;very&nbsp;good&nbsp;discussion&nbsp;for&nbsp;us.&nbsp;I&nbsp;had&nbsp;sent&nbsp;this&nbsp;subject&nbsp;to&nbsp;our&nbsp;development&nbsp;team&nbsp;and&nbsp;I&nbsp;think&nbsp;it&nbsp;should&nbsp;be&nbsp;helpful&nbsp;for&nbsp;enhancement&nbsp;our&nbsp;APIs.&nbsp;  
&nbsp;&nbsp;  
&nbsp;But&nbsp;I&nbsp;am&nbsp;sorry&nbsp;maybe&nbsp;we&nbsp;cannot&nbsp;modify&nbsp;currently&nbsp;logic&nbsp;for&nbsp;now,&nbsp;but&nbsp;I&nbsp;think&nbsp;if&nbsp;project&nbsp;need&nbsp;we&nbsp;can&nbsp;implement&nbsp;that&nbsp;by&nbsp;override&nbsp;the&nbsp;BufferCore&nbsp;function&nbsp;in&nbsp;BaseShape&nbsp;class&nbsp;as&nbsp;a&nbsp;workaround,&nbsp;which&nbsp;can&nbsp;make&nbsp;Buffer&nbsp;works&nbsp;more&nbsp;suitable&nbsp;your&nbsp;scenario.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Any&nbsp;suggestion&nbsp;or&nbsp;question&nbsp;please&nbsp;feel&nbsp;free&nbsp;to&nbsp;let&nbsp;us&nbsp;know.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don&nbsp;

---

<div class="post-metadata">

**Author:** ![John1](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/j/e9bcb4/32.png) [@John1](https://community.thinkgeo.com/u/John1)\
**Post date:** [March 9, 2016, 11:41am UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/10 "2016-03-09T11:41:46Z")

</div>

Thanks&nbsp;for&nbsp;bearing&nbsp;with&nbsp;me&nbsp;through&nbsp;my&nbsp;attempt&nbsp;to&nbsp;explain&nbsp;how&nbsp;ThinkGeo’s&nbsp;buffer&nbsp;behavior&nbsp;differs&nbsp;from&nbsp;expected.&nbsp;&nbsp;I&nbsp;certainly&nbsp;don’t&nbsp;expect&nbsp;ThinkGeo&nbsp;to&nbsp;implement&nbsp;any&nbsp;short-term&nbsp;change&nbsp;to&nbsp;behavior,&nbsp;merely&nbsp;wished&nbsp;to&nbsp;raise&nbsp;the&nbsp;issue&nbsp;so&nbsp;you&nbsp;are&nbsp;aware&nbsp;of&nbsp;it&nbsp;and&nbsp;therefore&nbsp;have&nbsp;the&nbsp;possibility&nbsp;of&nbsp;considering&nbsp;it&nbsp;at&nbsp;some&nbsp;point&nbsp;in&nbsp;the&nbsp;possibly&nbsp;distant&nbsp;future.&nbsp;  
&nbsp;&nbsp;  
&nbsp;The&nbsp;workaround&nbsp;of&nbsp;converting&nbsp;the&nbsp;shape&nbsp;to&nbsp;a&nbsp;different&nbsp;projection&nbsp;before&nbsp;calling&nbsp;buffer&nbsp;will&nbsp;work&nbsp;great&nbsp;for&nbsp;me.&nbsp;&nbsp;It’s&nbsp;a&nbsp;few&nbsp;extra&nbsp;lines&nbsp;of&nbsp;code&nbsp;to&nbsp;do&nbsp;the&nbsp;conversion&nbsp;to&nbsp;and&nbsp;from&nbsp;a&nbsp;different&nbsp;projection,&nbsp;but&nbsp;I’ll&nbsp;bury&nbsp;all&nbsp;that&nbsp;(convert&nbsp;to&nbsp;a&nbsp;different&nbsp;projection,&nbsp;call&nbsp;buffer,&nbsp;convert&nbsp;result&nbsp;back&nbsp;to&nbsp;lat/long)&nbsp;in&nbsp;a&nbsp;function&nbsp;so&nbsp;it&nbsp;will&nbsp;merely&nbsp;involve&nbsp;making&nbsp;a&nbsp;one-line&nbsp;change&nbsp;each&nbsp;time&nbsp;I&nbsp;call&nbsp;buffer&nbsp;now&nbsp;to&nbsp;instead&nbsp;call&nbsp;my&nbsp;own&nbsp;buffer&nbsp;function&nbsp;instead.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Thanks,&nbsp;  
&nbsp;John

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [March 10, 2016, 1:24am UTC](https://community.thinkgeo.com/t/is-buffer-broken/7192/11 "2016-03-10T01:24:01Z")

</div>

Hi&nbsp;John,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Thanks&nbsp;for&nbsp;your&nbsp;understanding,&nbsp;we&nbsp;are&nbsp;glad&nbsp;to&nbsp;get&nbsp;feedback&nbsp;from&nbsp;our&nbsp;users,&nbsp;that’s&nbsp;really&nbsp;helpful&nbsp;for&nbsp;us.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don
