public void ConvertDataContainerToGeoJson_ShouldConvertToGeoJson()
        {
            var dataContainer = new DataContainer { markers = new List<MarkerData> { new MarkerData { latlng = new LatLng() } } };
            var results = _converterService.ToAnyFormat(dataContainer, "geojson").Result.ToFeatureCollection();

            Assert.AreEqual(1, results.Features.Count);
        }
        public void ToGpx_WithData_ShouldReturnFullGpx()
        {
            var dataContainer = new DataContainer
            {
                markers = new List<MarkerData> { new MarkerData { latlng = new LatLng { lat = 1, lng = 2 } } },
                routes = new List<RouteData>
                {
                    new RouteData
                    {
                        name = "name",
                        segments = new List<RouteSegmentData>
                        {
                            new RouteSegmentData {latlngzs = new List<LatLngZ> {new LatLngZ {lat = 3, lng = 4, z = 5}}}
                        }
                    }
                }
            };

            var gpx = _converter.ToGpx(dataContainer);

            Assert.AreEqual(1, gpx.wpt.Length);
            Assert.AreEqual(1, gpx.wpt[0].lat);
            Assert.AreEqual(2, gpx.wpt[0].lon);
            Assert.AreEqual(0, gpx.rte.Length);
            Assert.AreEqual(1, gpx.trk.Length);
            Assert.AreEqual(1, gpx.trk[0].trkseg.Length);
            Assert.AreEqual(3, gpx.trk[0].trkseg[0].trkpt[0].lat);
            Assert.AreEqual(4, gpx.trk[0].trkseg[0].trkpt[0].lon);
            Assert.AreEqual(5, gpx.trk[0].trkseg[0].trkpt[0].ele);
        }
        public void ConvertDataContainerToKml_ShouldConvertToKmlUsingGpsBabel()
        {
            var datacContainer = new DataContainer();
            _gpsBabelGateway.ConvertFileFromat(Arg.Any<byte[]>(), Arg.Any<string>(), Arg.Any<string>()).Returns(Task.FromResult(_randomBytes));

            var results = _converterService.ToAnyFormat(datacContainer, "kml").Result;

            CollectionAssert.AreEqual(_randomBytes, results);
        }
        public void ConvertDataContainerToGpx_ShouldConvertToGpx()
        {
            var dataContainer = new DataContainer();

            var results = _converterService.ToAnyFormat(dataContainer, "gpx").Result.ToGpx();

            Assert.IsNull(results.wpt);
            Assert.IsNull(results.rte);
            Assert.IsNull(results.trk);
        }
        public void ToGpx_NoData_ShouldReturnEmptyGpx()
        {
            var dataContainer = new DataContainer();

            var gpx = _converter.ToGpx(dataContainer);

            Assert.AreEqual(0, gpx.wpt.Length);
            Assert.AreEqual(0, gpx.rte.Length);
            Assert.AreEqual(0, gpx.trk.Length);
        }
 public gpxType ToGpx(DataContainer container)
 {
     var routes = (container.routes ?? new List<RouteData>()).Where(r => r.segments.SelectMany(s => s.latlngzs).Any());
     return new gpxType
     {
         wpt = container.markers.Select(ToWptType).ToArray(),
         rte = new rteType[0],
         trk = routes.Select(r => new trkType
         {
             name = r.name,
             trkseg = r.segments.Select(ToTrksegType).ToArray()
         }).ToArray()
     }.UpdateBounds();
 }
 public DataContainer ToDataContainer(gpxType gpx)
 {
     gpx.UpdateBounds();
     var container = new DataContainer
     {
         markers = (gpx.wpt ?? new wptType[0]).Select(ToMarkerData).ToList(),
         routes = ConvertRoutesToRoutesData(gpx.rte ?? new rteType[0])
     };
     container.routes.AddRange(ConvertTracksToRouteData(gpx.trk ?? new trkType[0]));
     if (gpx.metadata?.bounds != null)
     {
         UpdateBoundingBox(container, gpx.metadata.bounds);
     }
     return container;
 }
 public async Task<byte[]> Create(DataContainer dataContainer)
 {
     _logger.Debug("Creating image for thumbnail started.");
     var allLocations = dataContainer.routes.SelectMany(r => r.segments).SelectMany(s => s.latlngzs.OfType<LatLng>()).ToArray();
     if (!allLocations.Any())
     {
         allLocations = new[] { dataContainer.northEast, dataContainer.southWest };
     }
     var backgroundImage = await GetBackGroundImage(GetAddressTemplate(dataContainer), allLocations);
     var points = dataContainer.routes
             .Select(r => r.segments.SelectMany(s => s.latlngzs)
                         .Select(l => ConvertLatLngZToPoint(l, backgroundImage))
                         .ToArray());
     DrawRouteOnImage(backgroundImage.Image, points);
     var resizedForFacebook = new Bitmap(backgroundImage.Image, new Size(600, 315));
     var imageStream = new MemoryStream();
     resizedForFacebook.Save(imageStream, ImageFormat.Png);
     _logger.Debug("Creating image for thumbnail completed.");
     return imageStream.ToArray();
 }
        public void LocalTiles_RouteWithNoPoints_ShouldReturnBackgroungImageFromBounds()
        {
            var dataContainer = new DataContainer
            {
                northEast = new LatLng { lat = 0.1, lng = 0.1 },
                southWest = new LatLng { lat = 0.15, lng = 0.15 },
                baseLayer = new LayerData { address = "/Tiles/{z}/{x}/{y}.png"},
                routes = new List<RouteData> {  new RouteData() }
            };

            var ressults = _imageCreationService.Create(dataContainer).Result;

            Assert.IsTrue(ressults.Length > 0);
            _remoteFileFetcherGateway.Received(8).GetFileContent(Arg.Any<string>());
        }
        public void ConvertDataContainerToGpxSingleTrack_ShouldConvertToGpxUsingGpsBabelAndThenToGpxSingleTrack()
        {
            var datacContainer = new DataContainer
            {
                routes = new List<RouteData>
                {
                    new RouteData
                    {
                        segments = new List<RouteSegmentData>
                        {
                            new RouteSegmentData
                            {
                                latlngzs = new List<LatLngZ>
                                {
                                    new LatLngZ {lat = 1, lng = 2},
                                    new LatLngZ {lat = 3, lng = 4}
                                }
                            },
                            new RouteSegmentData
                            {
                                latlngzs = new List<LatLngZ>
                                {
                                    new LatLngZ {lat = 5, lng = 6},
                                    new LatLngZ {lat = 7, lng = 8}
                                }
                            }
                        }
                    }
                }
            };

            var results = _converterService.ToAnyFormat(datacContainer, "gpx_single_track").Result;
            var gpx = results.ToGpx();

            Assert.AreEqual(1, gpx.trk.Length);
            Assert.AreEqual(1, gpx.trk.First().trkseg.Length);
            Assert.AreEqual(1, gpx.trk.First().trkseg.First().trkpt.First().lat);
            Assert.AreEqual(8, gpx.trk.First().trkseg.First().trkpt.Last().lon);
        }
        private void UpdateBoundingBox(DataContainer container, boundsType bounds)
        {
            container.northEast = new LatLngZ 
            {
                lat = (double)bounds.maxlat,
                lng = (double)bounds.maxlon
            };

            container.southWest = new LatLngZ
            {
                lat = (double)bounds.minlat,
                lng = (double)bounds.minlon
            };
        }
        public void PostSaveFile_ConvertToGpx_ShouldReturnByteArray()
        {
            var dataContainer = new DataContainer
            {
                routes = new List<RouteData>
                {
                    new RouteData
                    {
                        segments = new List<RouteSegmentData>
                        {
                            new RouteSegmentData {latlngzs = new List<LatLngZ> {new LatLngZ()}}
                        }
                    }
                },
                markers = new List<MarkerData>
                {
                    new MarkerData
                    {
                        latlng = new LatLng {lat = 10, lng = 10},
                        title = "title"
                    }
                }
            };
            var expectedGpx = _gpxDataContainerConverter.ToGpx(dataContainer);
            expectedGpx.creator = "IsraelHikingMap";

            var bytes = _controller.PostSaveFile("gpx", dataContainer).Result;

            
            CollectionAssert.AreEqual(expectedGpx.ToBytes(), bytes);
        }
 public Task<byte[]> ToAnyFormat(DataContainer dataContainer, string format)
 {
     var gpx = _gpxDataContainerConverter.ToGpx(dataContainer);
     gpx.creator = ISRAEL_HIKING_MAP;
     return Convert(gpx.ToBytes(), GPX, format);
 }
 private static string GetAddressTemplate(DataContainer dataContainer)
 {
     var address = string.IsNullOrWhiteSpace(dataContainer.baseLayer.address)
         ? "http://israelhiking.osm.org.il/tiles/{z}/{x}/{y}.png"
         : dataContainer.baseLayer.address;
     if (address.StartsWith("http") == false && address.StartsWith("www") == false)
     {
         address = "http://israelhiking.osm.org.il/" + address;
     }
     return address;
 }
        public void ConvertToGpxAndBack_WithData_ShouldReturnTheSameData()
        {
            var dataContainer = new DataContainer
            {
                markers = new List<MarkerData> { new MarkerData { latlng = new LatLng { lat = 1, lng = 2 } } },
                routes = new List<RouteData>
                {
                    new RouteData
                    {
                        name = "name1",
                        segments = new List<RouteSegmentData>
                        {
                            new RouteSegmentData {
                                latlngzs = new List<LatLngZ>
                                {
                                    new LatLngZ {lat = 3, lng = 4, z = 5},
                                    new LatLngZ {lat = 6, lng = 7, z = 8}
                                },
                                routePoint = new LatLng { lat = 6, lng = 7}
                            }
                        }
                    },
                    new RouteData
                    {
                        name = "name2",
                        segments = new List<RouteSegmentData>
                        {
                            new RouteSegmentData {latlngzs = new List<LatLngZ>
                            {
                                new LatLngZ {lat = 13, lng = 14, z = 15},
                                new LatLngZ {lat = 16, lng = 17, z = 18}
                            }}
                        }
                    }
                }
            };

            var gpx = _converter.ToGpx(dataContainer);
            var newDataContainer = _converter.ToDataContainer(gpx);

            Assert.AreEqual(dataContainer.routes.Count, newDataContainer.routes.Count);
            Assert.AreEqual(dataContainer.routes.First().name, newDataContainer.routes.First().name);
            CollectionAssert.AreEqual(dataContainer.routes.First().segments.First().latlngzs, newDataContainer.routes.First().segments.First().latlngzs);
            Assert.AreEqual(dataContainer.markers.First().latlng, newDataContainer.markers.First().latlng);
            Assert.AreEqual(dataContainer.routes.Last().name, newDataContainer.routes.Last().name);
        }