public DeviceListLocationsModel ExtractLocationsData(List<dynamic> devices) { var result = new DeviceListLocationsModel(); // Initialize defaults to opposite extremes to ensure mins and maxes are beyond any actual values double minLat = double.MaxValue; double maxLat = double.MinValue; double minLong = double.MaxValue; double maxLong = double.MinValue; var locationList = new List<DeviceLocationModel>(); foreach(dynamic device in devices) { dynamic props = DeviceSchemaHelper.GetDeviceProperties(device); if (props.Longitude == null || props.Latitude == null) { continue; } double latitude; double longitude; try { latitude = DeviceSchemaHelper.GetDeviceProperties(device).Latitude; longitude = DeviceSchemaHelper.GetDeviceProperties(device).Longitude; } catch (FormatException) { continue; } var location = new DeviceLocationModel() { DeviceId = DeviceSchemaHelper.GetDeviceID(device), Longitude = longitude, Latitude = latitude }; locationList.Add(location); if (longitude < minLong) { minLong = longitude; } if (longitude > maxLong) { maxLong = longitude; } if (latitude < minLat) { minLat = latitude; } if (latitude > maxLat) { maxLat = latitude; } } if (locationList.Count == 0) { // reinitialize bounds to center on Seattle area if no devices minLat = 47.6; maxLat = 47.6; minLong = -122.3; maxLong = -122.3; } double offset = 0.05; result.DeviceLocationList = locationList; result.MinimumLatitude = minLat - offset; result.MaximumLatitude = maxLat + offset; result.MinimumLongitude = minLong - offset; result.MaximumLongitude = maxLong + offset; return result; }
public DeviceListLocationsModel ExtractLocationsData(List<DeviceModel> devices) { var result = new DeviceListLocationsModel(); // Initialize defaults to opposite extremes to ensure mins and maxes are beyond any actual values double minLat = double.MaxValue; double maxLat = double.MinValue; double minLong = double.MaxValue; double maxLong = double.MinValue; var locationList = new List<DeviceLocationModel>(); if (devices != null && devices.Count > 0) { foreach (DeviceModel device in devices) { if (device.DeviceProperties == null) { throw new DeviceRequiredPropertyNotFoundException("Required DeviceProperties not found"); } if (device.DeviceProperties.Longitude == null || device.DeviceProperties.Latitude == null) { continue; } double latitude; double longitude; try { latitude = device.DeviceProperties.Latitude.Value; longitude = device.DeviceProperties.Longitude.Value; } catch (FormatException) { continue; } var location = new DeviceLocationModel() { DeviceId = device.DeviceProperties.DeviceID, Longitude = longitude, Latitude = latitude }; locationList.Add(location); if (longitude < minLong) { minLong = longitude; } if (longitude > maxLong) { maxLong = longitude; } if (latitude < minLat) { minLat = latitude; } if (latitude > maxLat) { maxLat = latitude; } } } if (locationList.Count == 0) { // reinitialize bounds to center on Seattle area if no devices minLat = 47.6; maxLat = 47.6; minLong = -122.3; maxLong = -122.3; } double offset = 0.05; result.DeviceLocationList = locationList; result.MinimumLatitude = minLat - offset; result.MaximumLatitude = maxLat + offset; result.MinimumLongitude = minLong - offset; result.MaximumLongitude = maxLong + offset; return result; }