none
Bing Maps Pushpins XAML C# RRS feed

  • Question

  • Hi, I am building a Bing Map Windows Store App and  how can I prevent Bing Map pushpins being placed in the sea/ocean. I have look up Bing map REST services but could not find any solutions. I am using XAML and c#.
    Thursday, September 24, 2015 11:43 PM

Answers

  • You could do this in a couple of different ways. The first option is to store a basic polygon in your code and try and use a point in polygon type function. This will work fairly well with the exception that most of the point in polygon functions you will find online are not spatially accurate and are meant for flat 2D geometry. If you want your code to be spatially accurate there are two options, the first is to create a web service that has the boundary data in it and makes use of the SQL spatial .NET library. You can then use that library to do your check. That would be a decent amount of work. A third option is similar to that one but consists of using the Bing Spatial Data Services to upload your polygon boundaries and then doing a point intersection test using the REST services for the API. This would require minimal work on your side.

    To implement the third option you will first need to create a data source that has your boundaries and upload it to the Bing Spatial Data Services using the Bing Maps Account Center. I've provided a pipe delimited data source that has the boundaries of Tasmania at the end of this post. Uploading the data source is pretty easy, but here is a detailed article on how this whole process works: https://msdn.microsoft.com/en-us/library/gg650600.aspx

    Once the data is uploaded you can then grab the query URL and use it to query the data. For this app we simply need to see if a coordinate intersects with the boundary. This can be done by using the Query API. If the API finds any boundaries when doing an intersection test, then the coordinate is within the boundary, otherwise its not. You can find documentation on the Query API here: https://msdn.microsoft.com/en-us/library/gg585133.aspx

    I've put together a quick code sample using JavaScript. you can easily port this to .NET in your WP app.

    <!DOCTYPE />
    <html>
       <head>
          <title></title>
          <script type="text/javascript">
    		var bingMapsKey = "YOUR_BING_MAPS_KEY";
    		
    		//URL to data source. Update with your data source URL.
    		var dataSourceUrl = "https://spatial.virtualearth.net/REST/v1/data/c37ce4cd57b3458381e5199ab8aab3d3/Boundaries/TasmaniaBoundaries";
    		
    		function TestCoordinate(){
    			var lat = document.getElementById('latitude').value;
    			var lon = document.getElementById('longitude').value;
    
    			//Create intersection test query
    			var spatialFilter = "?spatialFilter=intersects('POINT(" + lon + " " + lat + ")')"; 
    
    			var sdsRequest = dataSourceUrl + spatialFilter + "&$select=EntityID,Name&$format=json&jsonp=callback&key=" + bingMapsKey;
    
    			var script = document.createElement('script');
    			script.type = 'text/javascript';
    			script.src = sdsRequest;
    			document.body.appendChild(script);
    		}
    
    		function callback(r){
    			if(r && r.d != null && r.d.results != null && r.d.results.length > 0){
    				//coordinate intersects
    				document.getElementById('output').innerText = "Pushpin intersects with the boundary of " + r.d.results[0].Name + ".";
    			}else{
    				//Coordinate does not intersect
    				document.getElementById('output').innerText = "Pushpin does not intersect with any boundaries.";
    			}
    		}
          </script>
       </head>
       <body onload="getMap();">
    		Latitude: <input id="latitude" type="text" value="-42"/> 
    		Longitude: <input id="longitude" type="text" value="146.8"/>
    		<input type="button" value="Check coordinate" onclick="TestCoordinate()"/><br/><br/>
    		<div id='output'></div>
       </body>
    </html>

    Here is a simple data source with the boundary of Tasmania. When you upload this to the Bing Maps portal you will be able to get a unique URL to query this data source. Replace the dataSourceUrl value in the code sample with this URL.

    Bing Spatial Data Services, 1.0, TasmaniaBoundaries
    EntityID(Edm.String,primaryKey)|Name(Edm.String)|Longitude(Edm.Double)|Latitude(Edm.Double)|Boundary(Edm.Geography)
    1|Tasmania|||MULTIPOLYGON (((143.91984 -40.15844, 143.9211 -40.15802, 144.06918 -40.04178, 144.12803 -39.9956, 144.10667 -39.81975, 144.10919 -39.67308, 144.00091 -39.60104, 143.94345 -39.58249, 143.92643 -39.66913, 143.89037 -39.68942, 143.84579 -39.7145, 143.85376 -40.06372, 143.91984 -40.15844)), ((148.08819 -40.27395, 148.25787 -40.23291, 148.33305 -40.21472, 148.28459 -40.08532, 148.22111 -40.12591, 148.27932 -39.99999, 148.29443 -39.96453, 148.18014 -39.95147, 147.98283 -39.75927, 147.94412 -39.72155, 147.74974 -39.87519, 147.88705 -39.91867, 147.90403 -39.99147, 147.85473 -40.02436, 148.00263 -40.10816, 148.02241 -40.22773, 148.08819 -40.27395)), ((144.89155 -40.4874, 144.95889 -40.43594, 144.89269 -40.392, 144.83267 -40.44787, 144.89155 -40.48740)), ((148.3961 -40.49414, 148.48054 -40.43975, 148.33019 -40.29791, 148.30828 -40.30196, 148.07824 -40.34451, 147.98513 -40.42483, 148.2241 -40.4708, 148.30952 -40.43417, 148.38422 -40.4859, 148.3961 -40.49414)), ((148.19628 -40.59356, 148.24531 -40.49179, 148.19088 -40.49391, 148.11338 -40.51494, 148.11143 -40.56934, 148.19628 -40.59356)), ((144.75495 -40.60967, 144.78245 -40.40566, 144.70192 -40.51243, 144.75495 -40.60967)), ((148.01017 -42.73767, 148.08303 -42.72735, 148.06903 -42.67407, 148.16178 -42.6502, 148.07168 -42.57397, 148.00892 -42.66479, 148.0682 -42.67414, 148.01017 -42.73767)), ((147.77778 -43.23547, 147.87144 -43.20678, 147.8587 -43.10919, 147.89495 -43.1911, 147.99526 -43.23016, 147.95864 -43.19232, 148.00479 -43.14013, 147.95353 -43.14068, 147.92309 -43.02352, 147.9913 -42.91217, 147.8778 -42.84887, 147.89735 -42.90338, 147.79727 -42.89025, 147.86187 -42.94781, 147.80958 -42.96148, 147.84336 -43.01391, 147.92251 -43.02319, 147.85819 -43.05554, 147.74801 -43.04547, 147.67598 -42.93646, 147.61988 -43.06628, 147.73757 -43.09655, 147.69166 -43.16705, 147.77778 -43.23547)), ((146.82305 -43.64398, 146.85076 -43.63134, 146.91807 -43.6007, 146.88752 -43.53662, 146.99534 -43.47082, 146.90486 -43.4331, 147.01466 -43.44403, 147.05688 -43.35479, 146.97064 -43.32818, 147.0968 -43.28961, 146.9663 -43.18145, 147.06073 -43.22302, 147.08972 -43.16906, 147.08747 -43.24365, 147.16442 -43.28308, 147.25781 -43.22741, 147.26144 -43.16583, 147.38085 -43.182, 147.3531 -43.2608, 147.31793 -43.30706, 147.28723 -43.24493, 147.22994 -43.36462, 147.1759 -43.35491, 147.17654 -43.46624, 147.08981 -43.42034, 147.13005 -43.49963, 147.17783 -43.46784, 147.20782 -43.44384, 147.24328 -43.49389, 147.31961 -43.50488, 147.37863 -43.3706, 147.31887 -43.30719, 147.42999 -43.24224, 147.35794 -43.06616, 147.30583 -43.11212, 147.35632 -43.13598, 147.26192 -43.16556, 147.27018 -43.01763, 147.33981 -43.05285, 147.3206 -42.83264, 147.17068 -42.74203, 147.25839 -42.75623, 147.3206 -42.83264, 147.40763 -42.93951, 147.47779 -42.90905, 147.47215 -43.031, 147.39005 -42.9776, 147.4140 -43.05029, 147.47299 -43.03197, 147.49275 -43.02416, 147.55146 -42.98644, 147.5036 -42.86541, 147.60127 -42.84509, 147.47128 -42.81268, 147.59265 -42.78918, 147.60127 -42.84509, 147.60527 -42.87097, 147.69923 -42.87133, 147.63868 -42.89257, 147.7630 -42.90789, 147.79727 -42.89025, 147.8778 -42.84887, 147.95727 -42.6831, 147.87185 -42.56109, 147.91726 -42.50604, 147.9448 -42.55822, 148.00723 -42.51348, 147.97941 -42.41015, 148.02336 -42.3529, 147.92953 -42.34283, 148.01388 -42.28546, 148.08219 -42.1051, 148.1993 -42.10369, 148.22962 -42.10333, 148.29562 -42.12786, 148.28352 -42.16632, 148.25579 -42.25451, 148.29826 -42.28558, 148.34408 -42.22607, 148.28468 -42.16638, 148.34057 -42.10967, 148.2714 -42.04235, 148.3208 -41.91772, 148.28593 -41.86846, 148.31707 -41.60345, 148.23207 -41.46643, 148.34907 -41.29288, 148.34855 -41.28457, 148.32748 -41.2926, 148.33647 -41.27081, 148.32585 -41.2702, 148.33615 -41.26361, 148.25413 -41.1936, 148.29548 -41.06835, 148.25741 -41.04748, 148.34564 -40.99536, 148.27752 -40.93915, 148.07595 -40.77286, 147.93687 -40.74318, 147.88656 -40.88292, 147.65933 -40.82622, 147.41421 -41.0162, 147.27661 -40.94424, 147.13951 -41.03691, 147.0126 -40.98314, 146.78575 -41.05701, 146.80671 -41.09635, 146.76147 -41.12122, 146.71005 -41.06572, 146.55062 -41.15532, 146.54546 -41.15615, 146.52893 -41.1208, 146.35806 -41.17934, 146.35128 -41.1615, 146.12045 -41.16304, 145.50483 -40.85332, 145.44168 -40.89123, 145.30583 -40.8477, 145.25579 -40.71643, 145.25471 -40.80707, 145.10086 -40.79582, 145.16075 -40.82331, 145.11733 -40.84014, 145.05074 -40.78933, 144.97275 -40.72983, 145.06466 -40.71708, 145.0000 -40.67928, 144.93328 -40.63403, 144.8683 -40.74433, 144.7700 -40.74226, 144.7666 -40.74219, 144.76392 -40.73645, 144.72169 -40.64586, 144.70126 -40.67632, 144.67202 -40.7199, 144.70889 -40.85836, 144.61019 -40.93688, 144.60723 -41.01269, 144.76361 -41.41757, 144.91491 -41.71463, 145.24996 -42.02197, 145.20944 -42.23132, 145.28054 -42.23196, 145.33161 -42.15468, 145.46433 -42.34868, 145.55273 -42.3596, 145.45463 -42.44042, 145.44808 -42.40721, 145.20944 -42.23132, 145.16485 -42.19845, 145.29852 -42.57608, 145.26385 -42.63265, 145.36303 -42.66116, 145.49365 -42.99041, 145.58648 -42.97347, 145.67803 -43.0509, 145.66308 -43.09591, 145.79144 -43.19192, 145.83706 -43.31503, 145.92395 -43.30071, 145.86099 -43.27478, 145.92419 -43.18835, 145.98016 -43.32223, 146.06115 -43.2972, 146.12866 -43.3493, 146.17005 -43.29385, 146.22522 -43.38377, 146.16386 -43.36232, 146.14071 -43.409, 146.12866 -43.3493, 145.98016 -43.32223, 145.98904 -43.39489, 145.92883 -43.37072, 146.02905 -43.46874, 146.02899 -43.57028, 146.14395 -43.50216, 146.19842 -43.53942, 146.21484 -43.48657, 146.28622 -43.54434, 146.53668 -43.52465, 146.82305 -43.64398), (148.15331 -42.08526, 148.12435 -42.08098, 148.15469 -42.00274, 148.24264 -41.99226, 148.15331 -42.08526)))


    http://rbrundritt.wordpress.com

    • Proposed as answer by Ricky_Brundritt Monday, October 5, 2015 7:45 PM
    • Marked as answer by And1roxx Tuesday, October 6, 2015 5:12 AM
    Monday, October 5, 2015 7:41 PM

All replies

  • Can you provide more details. It isn't clear what you are trying to achieve. Are you trying to figure out if a coordinate is in an ocean or not, or are your coordinates over land and they appear to showing the pushpins in the ocean?

    http://rbrundritt.wordpress.com

    Friday, September 25, 2015 12:09 AM
  • Hi Ricky,

    What I am trying to achieve is to avoid users putting pushpins in the sea/ocean, kind of a validation. Say for example if a user place a pushpin in the ocean, an error message should pop up. Hope it is clear enough!! I have also read your word press but could not find a solution. Thanks

    Friday, September 25, 2015 12:28 AM
  • There are a few of ways to do this.

    The first option is to use the REST services as you mentioned to reverse geocode the coordinates. If you pass in a coordinate that is out in the ocean it will return an empty response. There are two issues with this approach though; If the coordinate is near land but still over water, it may find the closest road even though your coordinate is over water. The second issue is that this approach would generate a transaction for every coordinate the user places and would be inefficient.

    A second option is to get the boundaries for the oceans (and any other water ways you want to test against) and store them in a spatial database. You can then do an intersection test in the database to see if the coordinate intersects any of these areas. This method would be more accurate than using the reverse geocoder, but would require a web service, database and data. If you wanted to test against all water (lakes, rivers...) then it would be a lot more difficult to find the data you would need and would likely make your database big. Here is some information on how to create a spatial rest service on top of a database: https://blogs.bing.com/maps/2013/07/31/how-to-create-a-spatial-web-service-that-connects-a-database-to-bing-maps-using-ef5/

    https://blogs.bing.com/maps/2013/08/05/advance-spatial-queries-using-entity-framework-5/

    A third option is to do some tests against the map image itself. You could create a simple web service that grabs a small static map image from the Bing Maps REST Imagery service of the road map. You could then do a quick check to see what the color of the center of the image is. If it is the same blue or close to what is used for the water in Bing Maps, then it is overwater. This would likely be the most accurate approach and would require less development work than the second option. This would still generate a transaction for each location though. You may also have to check for the color of the dark blue labels that are shown over water just in case the coordinate lands there.

    A fourth option is to combine the second and the third. You could store some basic polygons for the oceans. This would likely be small and could be stored right in the service rather than in a database. The spatial tools that are in SQL can be used in .NET without a database which would likely be useful here. You could do a test against the simple polygons that are stored in the service as an initial check. This would cover most of the area of the water for you. You could then use the second option if the first check doesn't intersect with any polygons. This would give you more accuracy when closer to shore and would also work with lakes and rivers.

    If you can't find low resolution ocean boundary data you could always look for low resolution country boundary data and then use the spatial tools in SQL to calculate the inverse to get the oceans.


    http://rbrundritt.wordpress.com

    Monday, September 28, 2015 5:40 PM
  • Thanks Ricky, Will try option 2.

    Is it possible to draw a boundary around a certain area for E.g: around Tasmania, so every time someone try to put a pushpin outside of Tasmania they get an error message?

    Below is an copy I tried from "Professional Windows 8 Programming" book.

    Am i using the right approach?

                                                                                             

    public sealed partial class MainPage : Page
        {
            private readonly XNamespace BingMapsNamespace = "http://schemas.microsoft.com/search/local/ws/rest/v1";
            HttpResponseMessage response;
            MapShapeLayer layer = new MapShapeLayer();
            MapPolyline polyline = new MapPolyline();


            private Geolocator locator;
            private uint count;
            public MainPage()
            {
                this.InitializeComponent();
                this.WayPoints = new List<string>();
                this.locator = new Geolocator();
                this.locator.DesiredAccuracy = PositionAccuracy.High;

            }
            public List<string> WayPoints
            {
                get;
                set;
            }

            private void MapTapped(object sender, TappedRoutedEventArgs e)
            {
                Pushpin pin = new Pushpin();
                var position = e.GetPosition(this.myMap);
                Location location;
                if (myMap.TryPixelToLocation(position, out location))
                {
                    MapLayer.SetPosition(pin, location);
                    pin.Tag = count.ToString();
                    this.myMap.Children.Add(pin);
                    this.myMap.SetView(location);
                    this.GetDirections(location);
                }
            }

             private async void GetDirections(Bing.Maps.Location location)
            {
                WayPoints.Add(string.Format("{0}, {1}", location.Latitude, location.Longitude));

                if (WayPoints.Count < 2) return;

                HttpClient client = new HttpClient();

                StringBuilder builder = new StringBuilder("http://dev.virtualearth.net/REST/V1/Routes/Driving?o=xml&");

                for (int i = 0; i < WayPoints.Count; i++)
                {
                    builder.Append(string.Format("wp.{0}={1}&", i, WayPoints[i]));
                }
                builder.Append("routePathOutput=Points&avoid=Tolls&key=" + myMap.Credentials);
                try
                {
                    response = await client.GetAsync(builder.ToString());

                    response.EnsureSuccessStatusCode();
                }

                catch 
                {

                    ShowMessage("Route cannnot be found");
                }
                 try{
                    Stream stream = await response.Content.ReadAsStreamAsync();

                    XDocument document = XDocument.Load(stream);

                    var query = from p in document.Descendants(this.BingMapsNamespace + "Point")
                                select new
                                    {
                                        Latitude = p.Element(this.BingMapsNamespace + "Latitude").Value,
                                        Longitude = p.Element(this.BingMapsNamespace + "Longitude").Value
                                    };


                     MapPolyline polyline = new MapPolyline();

                    foreach (var point in query)
                    {
                        double latitude, longitude;

                        double.TryParse(point.Latitude, out latitude);
                        double.TryParse(point.Longitude, out longitude);

                        polyline.Locations.Add(new Location(latitude, longitude));
                    }
                    polyline.Color = Colors.Red;
                    polyline.Width = 5;
                    layer.Shapes.Add(polyline);
                    myMap.ShapeLayers.Add(layer);

                    var distance = (from d in document.Descendants(this.BingMapsNamespace + "TravelDistance")
                                    select d).First().Value;

                    double distanceTravel = double.Parse(distance);
                     if(distanceTravel <= 0)
                     {
                         ShowMessage("Go Back..");
                     }

                    this.DistanceTextBlock.Text = string.Format("{0} Kms", distance.ToString());
                }
                catch
                {
                    ShowMessage("Please try again.");
                }
            }

    Saturday, October 3, 2015 12:24 PM
  • You could do this in a couple of different ways. The first option is to store a basic polygon in your code and try and use a point in polygon type function. This will work fairly well with the exception that most of the point in polygon functions you will find online are not spatially accurate and are meant for flat 2D geometry. If you want your code to be spatially accurate there are two options, the first is to create a web service that has the boundary data in it and makes use of the SQL spatial .NET library. You can then use that library to do your check. That would be a decent amount of work. A third option is similar to that one but consists of using the Bing Spatial Data Services to upload your polygon boundaries and then doing a point intersection test using the REST services for the API. This would require minimal work on your side.

    To implement the third option you will first need to create a data source that has your boundaries and upload it to the Bing Spatial Data Services using the Bing Maps Account Center. I've provided a pipe delimited data source that has the boundaries of Tasmania at the end of this post. Uploading the data source is pretty easy, but here is a detailed article on how this whole process works: https://msdn.microsoft.com/en-us/library/gg650600.aspx

    Once the data is uploaded you can then grab the query URL and use it to query the data. For this app we simply need to see if a coordinate intersects with the boundary. This can be done by using the Query API. If the API finds any boundaries when doing an intersection test, then the coordinate is within the boundary, otherwise its not. You can find documentation on the Query API here: https://msdn.microsoft.com/en-us/library/gg585133.aspx

    I've put together a quick code sample using JavaScript. you can easily port this to .NET in your WP app.

    <!DOCTYPE />
    <html>
       <head>
          <title></title>
          <script type="text/javascript">
    		var bingMapsKey = "YOUR_BING_MAPS_KEY";
    		
    		//URL to data source. Update with your data source URL.
    		var dataSourceUrl = "https://spatial.virtualearth.net/REST/v1/data/c37ce4cd57b3458381e5199ab8aab3d3/Boundaries/TasmaniaBoundaries";
    		
    		function TestCoordinate(){
    			var lat = document.getElementById('latitude').value;
    			var lon = document.getElementById('longitude').value;
    
    			//Create intersection test query
    			var spatialFilter = "?spatialFilter=intersects('POINT(" + lon + " " + lat + ")')"; 
    
    			var sdsRequest = dataSourceUrl + spatialFilter + "&$select=EntityID,Name&$format=json&jsonp=callback&key=" + bingMapsKey;
    
    			var script = document.createElement('script');
    			script.type = 'text/javascript';
    			script.src = sdsRequest;
    			document.body.appendChild(script);
    		}
    
    		function callback(r){
    			if(r && r.d != null && r.d.results != null && r.d.results.length > 0){
    				//coordinate intersects
    				document.getElementById('output').innerText = "Pushpin intersects with the boundary of " + r.d.results[0].Name + ".";
    			}else{
    				//Coordinate does not intersect
    				document.getElementById('output').innerText = "Pushpin does not intersect with any boundaries.";
    			}
    		}
          </script>
       </head>
       <body onload="getMap();">
    		Latitude: <input id="latitude" type="text" value="-42"/> 
    		Longitude: <input id="longitude" type="text" value="146.8"/>
    		<input type="button" value="Check coordinate" onclick="TestCoordinate()"/><br/><br/>
    		<div id='output'></div>
       </body>
    </html>

    Here is a simple data source with the boundary of Tasmania. When you upload this to the Bing Maps portal you will be able to get a unique URL to query this data source. Replace the dataSourceUrl value in the code sample with this URL.

    Bing Spatial Data Services, 1.0, TasmaniaBoundaries
    EntityID(Edm.String,primaryKey)|Name(Edm.String)|Longitude(Edm.Double)|Latitude(Edm.Double)|Boundary(Edm.Geography)
    1|Tasmania|||MULTIPOLYGON (((143.91984 -40.15844, 143.9211 -40.15802, 144.06918 -40.04178, 144.12803 -39.9956, 144.10667 -39.81975, 144.10919 -39.67308, 144.00091 -39.60104, 143.94345 -39.58249, 143.92643 -39.66913, 143.89037 -39.68942, 143.84579 -39.7145, 143.85376 -40.06372, 143.91984 -40.15844)), ((148.08819 -40.27395, 148.25787 -40.23291, 148.33305 -40.21472, 148.28459 -40.08532, 148.22111 -40.12591, 148.27932 -39.99999, 148.29443 -39.96453, 148.18014 -39.95147, 147.98283 -39.75927, 147.94412 -39.72155, 147.74974 -39.87519, 147.88705 -39.91867, 147.90403 -39.99147, 147.85473 -40.02436, 148.00263 -40.10816, 148.02241 -40.22773, 148.08819 -40.27395)), ((144.89155 -40.4874, 144.95889 -40.43594, 144.89269 -40.392, 144.83267 -40.44787, 144.89155 -40.48740)), ((148.3961 -40.49414, 148.48054 -40.43975, 148.33019 -40.29791, 148.30828 -40.30196, 148.07824 -40.34451, 147.98513 -40.42483, 148.2241 -40.4708, 148.30952 -40.43417, 148.38422 -40.4859, 148.3961 -40.49414)), ((148.19628 -40.59356, 148.24531 -40.49179, 148.19088 -40.49391, 148.11338 -40.51494, 148.11143 -40.56934, 148.19628 -40.59356)), ((144.75495 -40.60967, 144.78245 -40.40566, 144.70192 -40.51243, 144.75495 -40.60967)), ((148.01017 -42.73767, 148.08303 -42.72735, 148.06903 -42.67407, 148.16178 -42.6502, 148.07168 -42.57397, 148.00892 -42.66479, 148.0682 -42.67414, 148.01017 -42.73767)), ((147.77778 -43.23547, 147.87144 -43.20678, 147.8587 -43.10919, 147.89495 -43.1911, 147.99526 -43.23016, 147.95864 -43.19232, 148.00479 -43.14013, 147.95353 -43.14068, 147.92309 -43.02352, 147.9913 -42.91217, 147.8778 -42.84887, 147.89735 -42.90338, 147.79727 -42.89025, 147.86187 -42.94781, 147.80958 -42.96148, 147.84336 -43.01391, 147.92251 -43.02319, 147.85819 -43.05554, 147.74801 -43.04547, 147.67598 -42.93646, 147.61988 -43.06628, 147.73757 -43.09655, 147.69166 -43.16705, 147.77778 -43.23547)), ((146.82305 -43.64398, 146.85076 -43.63134, 146.91807 -43.6007, 146.88752 -43.53662, 146.99534 -43.47082, 146.90486 -43.4331, 147.01466 -43.44403, 147.05688 -43.35479, 146.97064 -43.32818, 147.0968 -43.28961, 146.9663 -43.18145, 147.06073 -43.22302, 147.08972 -43.16906, 147.08747 -43.24365, 147.16442 -43.28308, 147.25781 -43.22741, 147.26144 -43.16583, 147.38085 -43.182, 147.3531 -43.2608, 147.31793 -43.30706, 147.28723 -43.24493, 147.22994 -43.36462, 147.1759 -43.35491, 147.17654 -43.46624, 147.08981 -43.42034, 147.13005 -43.49963, 147.17783 -43.46784, 147.20782 -43.44384, 147.24328 -43.49389, 147.31961 -43.50488, 147.37863 -43.3706, 147.31887 -43.30719, 147.42999 -43.24224, 147.35794 -43.06616, 147.30583 -43.11212, 147.35632 -43.13598, 147.26192 -43.16556, 147.27018 -43.01763, 147.33981 -43.05285, 147.3206 -42.83264, 147.17068 -42.74203, 147.25839 -42.75623, 147.3206 -42.83264, 147.40763 -42.93951, 147.47779 -42.90905, 147.47215 -43.031, 147.39005 -42.9776, 147.4140 -43.05029, 147.47299 -43.03197, 147.49275 -43.02416, 147.55146 -42.98644, 147.5036 -42.86541, 147.60127 -42.84509, 147.47128 -42.81268, 147.59265 -42.78918, 147.60127 -42.84509, 147.60527 -42.87097, 147.69923 -42.87133, 147.63868 -42.89257, 147.7630 -42.90789, 147.79727 -42.89025, 147.8778 -42.84887, 147.95727 -42.6831, 147.87185 -42.56109, 147.91726 -42.50604, 147.9448 -42.55822, 148.00723 -42.51348, 147.97941 -42.41015, 148.02336 -42.3529, 147.92953 -42.34283, 148.01388 -42.28546, 148.08219 -42.1051, 148.1993 -42.10369, 148.22962 -42.10333, 148.29562 -42.12786, 148.28352 -42.16632, 148.25579 -42.25451, 148.29826 -42.28558, 148.34408 -42.22607, 148.28468 -42.16638, 148.34057 -42.10967, 148.2714 -42.04235, 148.3208 -41.91772, 148.28593 -41.86846, 148.31707 -41.60345, 148.23207 -41.46643, 148.34907 -41.29288, 148.34855 -41.28457, 148.32748 -41.2926, 148.33647 -41.27081, 148.32585 -41.2702, 148.33615 -41.26361, 148.25413 -41.1936, 148.29548 -41.06835, 148.25741 -41.04748, 148.34564 -40.99536, 148.27752 -40.93915, 148.07595 -40.77286, 147.93687 -40.74318, 147.88656 -40.88292, 147.65933 -40.82622, 147.41421 -41.0162, 147.27661 -40.94424, 147.13951 -41.03691, 147.0126 -40.98314, 146.78575 -41.05701, 146.80671 -41.09635, 146.76147 -41.12122, 146.71005 -41.06572, 146.55062 -41.15532, 146.54546 -41.15615, 146.52893 -41.1208, 146.35806 -41.17934, 146.35128 -41.1615, 146.12045 -41.16304, 145.50483 -40.85332, 145.44168 -40.89123, 145.30583 -40.8477, 145.25579 -40.71643, 145.25471 -40.80707, 145.10086 -40.79582, 145.16075 -40.82331, 145.11733 -40.84014, 145.05074 -40.78933, 144.97275 -40.72983, 145.06466 -40.71708, 145.0000 -40.67928, 144.93328 -40.63403, 144.8683 -40.74433, 144.7700 -40.74226, 144.7666 -40.74219, 144.76392 -40.73645, 144.72169 -40.64586, 144.70126 -40.67632, 144.67202 -40.7199, 144.70889 -40.85836, 144.61019 -40.93688, 144.60723 -41.01269, 144.76361 -41.41757, 144.91491 -41.71463, 145.24996 -42.02197, 145.20944 -42.23132, 145.28054 -42.23196, 145.33161 -42.15468, 145.46433 -42.34868, 145.55273 -42.3596, 145.45463 -42.44042, 145.44808 -42.40721, 145.20944 -42.23132, 145.16485 -42.19845, 145.29852 -42.57608, 145.26385 -42.63265, 145.36303 -42.66116, 145.49365 -42.99041, 145.58648 -42.97347, 145.67803 -43.0509, 145.66308 -43.09591, 145.79144 -43.19192, 145.83706 -43.31503, 145.92395 -43.30071, 145.86099 -43.27478, 145.92419 -43.18835, 145.98016 -43.32223, 146.06115 -43.2972, 146.12866 -43.3493, 146.17005 -43.29385, 146.22522 -43.38377, 146.16386 -43.36232, 146.14071 -43.409, 146.12866 -43.3493, 145.98016 -43.32223, 145.98904 -43.39489, 145.92883 -43.37072, 146.02905 -43.46874, 146.02899 -43.57028, 146.14395 -43.50216, 146.19842 -43.53942, 146.21484 -43.48657, 146.28622 -43.54434, 146.53668 -43.52465, 146.82305 -43.64398), (148.15331 -42.08526, 148.12435 -42.08098, 148.15469 -42.00274, 148.24264 -41.99226, 148.15331 -42.08526)))


    http://rbrundritt.wordpress.com

    • Proposed as answer by Ricky_Brundritt Monday, October 5, 2015 7:45 PM
    • Marked as answer by And1roxx Tuesday, October 6, 2015 5:12 AM
    Monday, October 5, 2015 7:41 PM
  • Thanks Ricky.
    Tuesday, October 6, 2015 5:13 AM