/// <summary> /// Creates the grid cell bounding polygon from an SQL geometry. /// </summary> /// <param name="gridCell">The grid cell.</param> private static WebPolygon CreateGridCellBoundingPolygonFromSqlGeometry(SqlGeometry gridCell) { WebPolygon gridCellBoundingPolygon; //Map the gridCell coordinates to the BoundingBox polygon property in the returning object gridCellBoundingPolygon = new WebPolygon(); gridCellBoundingPolygon.LinearRings = new List <WebLinearRing>(); gridCellBoundingPolygon.LinearRings.Add(new WebLinearRing()); gridCellBoundingPolygon.LinearRings[0].Points = new List <WebPoint>(); gridCellBoundingPolygon.LinearRings[0].Points.Add(new WebPoint()); gridCellBoundingPolygon.LinearRings[0].Points.Add(new WebPoint()); gridCellBoundingPolygon.LinearRings[0].Points.Add(new WebPoint()); gridCellBoundingPolygon.LinearRings[0].Points.Add(new WebPoint()); gridCellBoundingPolygon.LinearRings[0].Points.Add(new WebPoint()); gridCellBoundingPolygon.LinearRings[0].Points[0].X = Convert.ToDouble(gridCell.STStartPoint().STX.Value); gridCellBoundingPolygon.LinearRings[0].Points[0].Y = Convert.ToDouble(gridCell.STStartPoint().STY.Value); gridCellBoundingPolygon.LinearRings[0].Points[1].X = Convert.ToDouble(gridCell.STStartPoint().STX.Value); gridCellBoundingPolygon.LinearRings[0].Points[1].Y = Convert.ToDouble(gridCell.STPointN(3).STY.Value); gridCellBoundingPolygon.LinearRings[0].Points[2].X = Convert.ToDouble(gridCell.STPointN(3).STX.Value); gridCellBoundingPolygon.LinearRings[0].Points[2].Y = Convert.ToDouble(gridCell.STPointN(3).STY.Value); gridCellBoundingPolygon.LinearRings[0].Points[3].X = Convert.ToDouble(gridCell.STPointN(3).STX.Value); gridCellBoundingPolygon.LinearRings[0].Points[3].Y = Convert.ToDouble(gridCell.STStartPoint().STY.Value); gridCellBoundingPolygon.LinearRings[0].Points[4].X = Convert.ToDouble(gridCell.STStartPoint().STX.Value); gridCellBoundingPolygon.LinearRings[0].Points[4].Y = Convert.ToDouble(gridCell.STStartPoint().STY.Value); return(gridCellBoundingPolygon); }
/// <summary> /// Get a SqlGeography instance with same /// information as provided WebPolygon. /// </summary> /// <param name="polygon">This polygon.</param> /// <returns> /// A SqlGeography instance with same /// information as provided WebPolygon. /// </returns> public static SqlGeography GetGeography(this WebPolygon polygon) { Boolean isFirstLinearRing; String comma; StringBuilder reverseWkt; try { return(SqlGeography.Parse(new SqlString(polygon.GetWkt()))); } catch (Exception) { } try { // Try with points in reverse order. reverseWkt = new StringBuilder("POLYGON()"); if (polygon.IsNotNull() && polygon.LinearRings.IsNotEmpty()) { isFirstLinearRing = true; foreach (WebLinearRing linearRing in polygon.LinearRings) { if (linearRing.Points.IsNotEmpty()) { if (isFirstLinearRing) { isFirstLinearRing = false; reverseWkt.Insert(8, "()"); } else { reverseWkt.Insert(8, "(), "); } comma = String.Empty; foreach (WebPoint point in linearRing.Points) { reverseWkt.Insert(9, point.X.WebToStringR().Replace(",", ".") + " " + (point.Y.WebToStringR().Replace(",", ".")) + comma); comma = ", "; } } } } return(SqlGeography.Parse(new SqlString(reverseWkt.ToString()))); } catch (Exception) { } return(null); }
/// <summary> /// Check that data is valid. /// </summary> /// <param name="polygon">The polygon.</param> public static void CheckData(this WebPolygon polygon) { if (polygon.IsNotNull()) { polygon.LinearRings.CheckNotEmpty("LinearRings"); foreach (WebLinearRing linearRing in polygon.LinearRings) { linearRing.CheckData(); } } }
/// <summary> /// Convert a IPolygon instance to a WebPolygon instance. /// </summary> /// <param name="polygon">An IPolygon instance.</param> /// <returns>A WebPolygon instance.</returns> public static WebPolygon ToWebPolygon(this IPolygon polygon) { WebPolygon webPolygon; webPolygon = new WebPolygon(); webPolygon.LinearRings = new List <WebLinearRing>(); foreach (ILinearRing linearRing in polygon.LinearRings) { webPolygon.LinearRings.Add(ToWebLinearRing(linearRing)); } return(webPolygon); }
/// <summary> /// Convert a WebBoundingBox instance into a WebPolygon /// instance with same geographic area. /// </summary> /// <param name="boundingBox">Bounding box.</param> /// <returns>A WebPolygon instance.</returns> public static WebPolygon GetPolygon(this WebBoundingBox boundingBox) { WebLinearRing linearRing; WebPolygon polygon; linearRing = new WebLinearRing(); linearRing.Points = new List <WebPoint>(); linearRing.Points.Add(new WebPoint(boundingBox.Min.X, boundingBox.Min.Y)); linearRing.Points.Add(new WebPoint(boundingBox.Max.X, boundingBox.Min.Y)); linearRing.Points.Add(new WebPoint(boundingBox.Max.X, boundingBox.Max.Y)); linearRing.Points.Add(new WebPoint(boundingBox.Min.X, boundingBox.Max.Y)); linearRing.Points.Add(new WebPoint(boundingBox.Min.X, boundingBox.Min.Y)); polygon = new WebPolygon(); polygon.LinearRings = new List <WebLinearRing>(); polygon.LinearRings.Add(linearRing); return(polygon); }
public void GetGeometry() { SqlGeometry polygonGeometry; WebLinearRing linearRing; WebPolygon polygon; linearRing = new WebLinearRing(); linearRing.Points = new List <WebPoint>(); linearRing.Points.Add(new WebPoint(2, 2)); linearRing.Points.Add(new WebPoint(4, 1)); linearRing.Points.Add(new WebPoint(5, 4)); linearRing.Points.Add(new WebPoint(2, 2)); polygon = new WebPolygon(); polygon.LinearRings = new List <WebLinearRing>(); polygon.LinearRings.Add(linearRing); polygonGeometry = polygon.GetGeometry(); Assert.IsNotNull(polygonGeometry); }
/// <summary> /// Get polygon information in WKT format. /// </summary> /// <param name="polygon">This polygon.</param> /// <returns>Polygon information in WKT format.</returns> public static String GetWkt(this WebPolygon polygon) { Boolean isFirstLinearRing, isFirstPoint; StringBuilder wkt; wkt = new StringBuilder("POLYGON"); wkt.Append("("); if (polygon.LinearRings.IsNotEmpty()) { isFirstLinearRing = true; foreach (WebLinearRing linearRing in polygon.LinearRings) { if (isFirstLinearRing) { isFirstLinearRing = false; } else { wkt.Append(", "); } wkt.Append("("); if (linearRing.Points.IsNotEmpty()) { isFirstPoint = true; foreach (WebPoint point in linearRing.Points) { if (isFirstPoint) { isFirstPoint = false; } else { wkt.Append(", "); } wkt.Append(point.X.WebToStringR().Replace(",", ".")); wkt.Append(" " + point.Y.WebToStringR().Replace(",", ".")); } } wkt.Append(")"); } } wkt.Append(")"); return(wkt.ToString()); }
/// <summary> /// Convert a IPolygon instance to a WebPolygon instance. /// </summary> /// <param name="polygon">An IPolygon instance.</param> /// <returns>A WebPolygon instance.</returns> protected WebPolygon GetPolygon(IPolygon polygon) { if (polygon == null) { return(null); } var webPolygon = new WebPolygon() { LinearRings = new List <WebLinearRing>() }; foreach (LinearRing linearRing in polygon.LinearRings) { webPolygon.LinearRings.Add(GetLinearRing(linearRing)); } return(webPolygon); }
/// <summary> /// This method will take a list of Sql Geometries, convert them to WebMultiPolygons /// and reproject them from the current coordinat system to the target coordinat system. /// </summary> /// <param name="toCoordinateSystem">The target coordinate system.</param> /// <param name="fromCoordinateSystem">The current coordinate system.</param> /// <param name="sqlGeometryToBeConvertedList">The slit of Sql Geometries that are to be converted.</param> public static List <WebPolygon> ReProjectPolygon(WebCoordinateSystem toCoordinateSystem, WebCoordinateSystem fromCoordinateSystem, List <SqlGeometry> sqlGeometryToBeConvertedList) { List <WebPolygon> webPolygonListToBeConverted; WebPolygon webPolygonToBeConverted; int sridInsqlGeometryToBeConvertedList = 0; int sridInfromCoordinateSystem = 0; webPolygonListToBeConverted = new List <WebPolygon>(); webPolygonToBeConverted = new WebPolygon(); if (sqlGeometryToBeConvertedList.IsNotEmpty()) { sridInsqlGeometryToBeConvertedList = (int)sqlGeometryToBeConvertedList[0].STSrid; sridInfromCoordinateSystem = GetSridFromWebCoordinateSystem(fromCoordinateSystem); if (!sridInfromCoordinateSystem.Equals(sridInsqlGeometryToBeConvertedList)) { throw new Exception("There is a mismatch between coordinate systems in Sql Geometry list and fromCoordinateSystem."); } if (toCoordinateSystem.GetWkt().ToUpper() != fromCoordinateSystem.GetWkt().ToUpper()) { //Todo: Konvertera sqlGeometryToBeConvertedList till WebMultiPolygon foreach (SqlGeometry geom in sqlGeometryToBeConvertedList) { webPolygonToBeConverted = geom.GetPolygon(); webPolygonListToBeConverted.Add(webPolygonToBeConverted); } // Convert coordinates if needed List <WebPolygon> toGeometryList = WebServiceData.CoordinateConversionManager.GetConvertedPolygons( webPolygonListToBeConverted, fromCoordinateSystem, toCoordinateSystem); return(toGeometryList); } } return(null); }
/// <summary> /// Cast Web Polygon to Polygon /// </summary> /// <param name="webPolygon"></param> /// <returns></returns> public static IPolygon ToPolygon(this WebPolygon webPolygon) { //First ring is shell var shell = webPolygon.LinearRings[0].ToLinearRing(); ILinearRing[] holes = null; var ringCount = webPolygon.LinearRings.Count; //All other rings are holes if (ringCount > 1) { holes = new ILinearRing[ringCount - 1]; for (var i = 1; i < ringCount; i++) { holes[i - 1] = webPolygon.LinearRings[i].ToLinearRing(); } } return(new Polygon(shell, holes)); }
public void GetBoundingBox() { WebBoundingBox boundingBox; WebLinearRing linearRing; WebPolygon polygon; linearRing = new WebLinearRing(); linearRing.Points = new List <WebPoint>(); linearRing.Points.Add(new WebPoint(2, 2)); linearRing.Points.Add(new WebPoint(4, 1)); linearRing.Points.Add(new WebPoint(5, 4)); linearRing.Points.Add(new WebPoint(2, 2)); polygon = new WebPolygon(); polygon.LinearRings = new List <WebLinearRing>(); polygon.LinearRings.Add(linearRing); boundingBox = polygon.GetBoundingBox(); Assert.IsNotNull(boundingBox); Assert.AreEqual(2, boundingBox.Min.X); Assert.AreEqual(5, boundingBox.Max.X); Assert.AreEqual(1, boundingBox.Min.Y); Assert.AreEqual(4, boundingBox.Max.Y); }
/// <summary> /// Gets the sweden extent bounding box polygon. /// </summary> /// <param name="coordinateSystem">The coordinate system.</param> public static WebPolygon GetSwedenExtentBoundingBoxPolygon(WebCoordinateSystem coordinateSystem) { WebPolygon boundingBox = new WebPolygon(); // Sweden extent in SWEREF99_TM WebBoundingBox swedenBoundingBox = SwedenExtentCoordinates.GetSwedenExtentWebBoundingBoxSweref99(); if (coordinateSystem.IsNotNull() && coordinateSystem.Id.IsNotNull() && (coordinateSystem.Id != CoordinateSystemId.SWEREF99_TM)) { WebCoordinateSystem sweref99CoordinateSystem = new WebCoordinateSystem(); sweref99CoordinateSystem.Id = CoordinateSystemId.SWEREF99_TM; boundingBox = WebServiceData.CoordinateConversionManager.GetConvertedBoundingBox( swedenBoundingBox, sweref99CoordinateSystem, coordinateSystem); } else { boundingBox = swedenBoundingBox.GetPolygon(); } return(boundingBox); }
/// <summary> /// Get bounding box for provided polygon. /// Currently only 2 dimensions are handled. /// </summary> /// <param name="polygon">This polygon.</param> /// <returns>Bounding box for provided polygon.</returns> public static WebBoundingBox GetBoundingBox(this WebPolygon polygon) { WebBoundingBox boundingBox; boundingBox = null; if (polygon.LinearRings.IsNotEmpty() && polygon.LinearRings[0].Points.IsNotEmpty()) { foreach (WebPoint point in polygon.LinearRings[0].Points) { if (boundingBox.IsNull()) { boundingBox = new WebBoundingBox(); boundingBox.Max = point.Clone(); boundingBox.Min = point.Clone(); } else { if (boundingBox.Max.X < point.X) { boundingBox.Max.X = point.X; } if (boundingBox.Max.Y < point.Y) { boundingBox.Max.Y = point.Y; } if (boundingBox.Min.X > point.X) { boundingBox.Min.X = point.X; } if (boundingBox.Min.Y > point.Y) { boundingBox.Min.Y = point.Y; } } } } return(boundingBox); }
/// <summary> /// Get a SqlGeometry instance with same /// information as provided WebPolygon. /// </summary> /// <param name="polygon">This polygon.</param> /// <returns> /// A SqlGeometry instance with same /// information as provided WebPolygon. /// </returns> public static SqlGeometry GetGeometry(this WebPolygon polygon) { return(SqlGeometry.Parse(new SqlString(polygon.GetWkt()))); }
/// <summary> /// Gets the sweden extent bounding box. /// </summary> /// <param name="coordinateSystem">The coordinate system.</param> public static WebBoundingBox GetSwedenExtentBoundingBox(WebCoordinateSystem coordinateSystem) { WebPolygon boundingBoxPolygon = GetSwedenExtentBoundingBoxPolygon(coordinateSystem); return(boundingBoxPolygon.GetBoundingBox()); }
/// <summary> /// Test if point is located inside polygon. /// Currently only two dimensions are handled. /// </summary> /// <param name="polygon">This polygon.</param> /// <param name='point'>Point.</param> /// <returns>True if point is located inside polygon.</returns> public static Boolean IsPointInsideGeometry(this WebPolygon polygon, WebPoint point) { return(polygon.GetGeometry().STContains(point.GetGeometry()).Value); }
public void GetDarwinCoreBySearchCriteria() { WebBirdNestActivity birdNestActivity; WebCoordinateSystem coordinateSystem, wgsCoordinateSystem; WebDarwinCoreInformation information1, information2; WebLinearRing linearRing; WebPolygon polygon; WebSpeciesObservationSearchCriteria searchCriteria; coordinateSystem = new WebCoordinateSystem(); coordinateSystem.Id = CoordinateSystemId.Rt90_25_gon_v; // Test search criteria Accuracy. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.DrumGrasshopperId); searchCriteria.IncludePositiveObservations = true; searchCriteria.IsAccuracySpecified = true; searchCriteria.Accuracy = 111; information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { Assert.IsTrue(Double.Parse(darwinCore.Location.CoordinateUncertaintyInMeters) <= searchCriteria.Accuracy); } searchCriteria.Accuracy = 59; information2 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information2); Assert.IsTrue(information2.SpeciesObservationCount < information1.SpeciesObservationCount); foreach (WebDarwinCore darwinCore in information2.SpeciesObservations) { Assert.IsTrue(Double.Parse(darwinCore.Location.CoordinateUncertaintyInMeters) <= searchCriteria.Accuracy); } // Test search criteria BoundingBox. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.DrumGrasshopperId); searchCriteria.IncludePositiveObservations = true; searchCriteria.BoundingBox = new WebBoundingBox(); searchCriteria.BoundingBox.Max = new WebPoint(1645000, 6681000); searchCriteria.BoundingBox.Min = new WebPoint(1308000, 6222000); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { Assert.IsTrue(darwinCore.Location.CoordinateX <= searchCriteria.BoundingBox.Max.X); Assert.IsTrue(darwinCore.Location.CoordinateX >= searchCriteria.BoundingBox.Min.X); Assert.IsTrue(darwinCore.Location.CoordinateY <= searchCriteria.BoundingBox.Max.Y); Assert.IsTrue(darwinCore.Location.CoordinateY >= searchCriteria.BoundingBox.Min.Y); } searchCriteria.BoundingBox.Max = new WebPoint(1500000, 6500000); searchCriteria.BoundingBox.Min = new WebPoint(1400000, 6300000); information2 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information2); Assert.IsTrue(information2.SpeciesObservationCount < information1.SpeciesObservationCount); foreach (WebDarwinCore darwinCore in information2.SpeciesObservations) { Assert.IsTrue(darwinCore.Location.CoordinateX <= searchCriteria.BoundingBox.Max.X); Assert.IsTrue(darwinCore.Location.CoordinateX >= searchCriteria.BoundingBox.Min.X); Assert.IsTrue(darwinCore.Location.CoordinateY <= searchCriteria.BoundingBox.Max.Y); Assert.IsTrue(darwinCore.Location.CoordinateY >= searchCriteria.BoundingBox.Min.Y); } // Test error with coordinate conversion. searchCriteria.BoundingBox.Max = new WebPoint(17.7, 60.0); searchCriteria.BoundingBox.Min = new WebPoint(17.6, 59.9); wgsCoordinateSystem = new WebCoordinateSystem(); wgsCoordinateSystem.Id = CoordinateSystemId.WGS84; information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, wgsCoordinateSystem); CheckDarwinCoreInformation(information1); // Test search criteria ChangeDateTime. // Test search criteria DataFieldSearchCriteria. // Test search criteria DataSourceIds. // Test search criteria IncludeNeverFoundObservations. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.DrumGrasshopperId); searchCriteria.IncludeNeverFoundObservations = true; information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { Assert.IsTrue(darwinCore.Occurrence.IsNeverFoundObservation); } // Test search criteria IncludeNotRediscoveredObservations. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.DrumGrasshopperId); searchCriteria.IncludeNotRediscoveredObservations = true; information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { Assert.IsTrue(darwinCore.Occurrence.IsNotRediscoveredObservation); } // Test search criteria IncludePositiveObservations. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.DrumGrasshopperId); searchCriteria.IncludePositiveObservations = true; information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { Assert.IsTrue(darwinCore.Occurrence.IsPositiveObservation); } // Test search criteria IncludeRedListCategories. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.IncludeNotRediscoveredObservations = true; searchCriteria.IncludeRedListCategories = new List <RedListCategory>(); searchCriteria.IncludeRedListCategories.Add(RedListCategory.CR); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { // The check for not empty red list category should not be // necessary but data on test server is not up to date. // This test has a problem with taxon 232265 that // is redlisted as VU since its parent taxon is // red listed as NT. if (darwinCore.Conservation.RedlistCategory.IsNotEmpty() && (Int32.Parse(darwinCore.Taxon.TaxonID) != 232265)) { Assert.AreEqual(searchCriteria.IncludeRedListCategories[0].ToString(), darwinCore.Conservation.RedlistCategory.Substring(0, 2).ToUpper()); } } // Test search criteria IncludeRedlistedTaxa. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.Accuracy = 3; searchCriteria.IsAccuracySpecified = true; searchCriteria.IncludeNotRediscoveredObservations = true; searchCriteria.IncludeRedlistedTaxa = true; information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); Assert.IsTrue(information1.SpeciesObservations.IsNotEmpty()); // Test search criteria LocalityNameSearchString. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.IncludePositiveObservations = true; searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.DrumGrasshopperId); searchCriteria.LocalityNameSearchString = new WebStringSearchCriteria(); searchCriteria.LocalityNameSearchString.CompareOperators = new List <StringCompareOperator>(); searchCriteria.LocalityNameSearchString.CompareOperators.Add(StringCompareOperator.Like); searchCriteria.LocalityNameSearchString.SearchString = "Fullerö%"; information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { Assert.AreEqual(searchCriteria.LocalityNameSearchString.SearchString.Substring(0, 7).ToUpper(), darwinCore.Location.Locality.Substring(0, 7).ToUpper()); } // Test search criteria ObservationDateTime. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.IncludePositiveObservations = true; searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.DrumGrasshopperId); searchCriteria.ObservationDateTime = new WebDateTimeSearchCriteria(); searchCriteria.ObservationDateTime.Begin = new DateTime(2009, 8, 1); searchCriteria.ObservationDateTime.End = new DateTime(2009, 8, 31); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { Assert.IsTrue(searchCriteria.ObservationDateTime.Begin <= darwinCore.Event.Start); Assert.IsTrue(searchCriteria.ObservationDateTime.End >= darwinCore.Event.Start); } searchCriteria.ObservationDateTime.PartOfYear = new List <WebDateTimeInterval>(); searchCriteria.ObservationDateTime.PartOfYear.Add(new WebDateTimeInterval()); searchCriteria.ObservationDateTime.PartOfYear[0].Begin = new DateTime(2009, 8, 1); searchCriteria.ObservationDateTime.PartOfYear[0].End = new DateTime(2009, 8, 31); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { Assert.AreEqual(searchCriteria.ObservationDateTime.PartOfYear[0].Begin.Month, darwinCore.Event.Start.Month); Assert.IsTrue(searchCriteria.ObservationDateTime.PartOfYear[0].Begin.Day <= darwinCore.Event.Start.Day); Assert.IsTrue(searchCriteria.ObservationDateTime.PartOfYear[0].End.Day >= darwinCore.Event.Start.Day); } // Test search criteria ObserverIds. // Test search criteria Polygons. linearRing = new WebLinearRing(); linearRing.Points = new List <WebPoint>(); linearRing.Points.Add(new WebPoint(1500000, 6500000)); linearRing.Points.Add(new WebPoint(1800000, 6500000)); linearRing.Points.Add(new WebPoint(1800000, 6800000)); linearRing.Points.Add(new WebPoint(1500000, 6500000)); polygon = new WebPolygon(); polygon.LinearRings = new List <WebLinearRing>(); polygon.LinearRings.Add(linearRing); searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.IncludePositiveObservations = true; searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.DrumGrasshopperId); searchCriteria.Polygons = new List <WebPolygon>(); searchCriteria.Polygons.Add(polygon); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); Assert.IsTrue(information1.SpeciesObservations.IsNotEmpty()); linearRing = new WebLinearRing(); linearRing.Points = new List <WebPoint>(); linearRing.Points.Add(new WebPoint(1300000, 6100000)); linearRing.Points.Add(new WebPoint(1600000, 6100000)); linearRing.Points.Add(new WebPoint(1600000, 6300000)); linearRing.Points.Add(new WebPoint(1300000, 6100000)); polygon = new WebPolygon(); polygon.LinearRings = new List <WebLinearRing>(); polygon.LinearRings.Add(linearRing); searchCriteria.Polygons.Add(polygon); information2 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information2); Assert.IsTrue(information2.SpeciesObservations.IsNotEmpty()); Assert.IsTrue(information1.SpeciesObservationCount < information2.SpeciesObservationCount); // Test search criteria ProjectIds. // Test search criteria RegionIds. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.IncludePositiveObservations = true; searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add((Int32)(TaxonId.DrumGrasshopper)); searchCriteria.TaxonIds.Add((Int32)(TaxonId.Hedgehog)); searchCriteria.RegionGuids = new List <String>(); searchCriteria.RegionGuids.Add(Settings.Default.UpplandGuid); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); Assert.IsTrue(information1.SpeciesObservations.IsNotEmpty()); searchCriteria.RegionGuids.Add(Settings.Default.BlekingeGUID); information2 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information2); Assert.IsTrue(information2.SpeciesObservations.IsNotEmpty()); Assert.IsTrue(information1.SpeciesObservationCount < information2.SpeciesObservationCount); searchCriteria.RegionGuids = new List <String>(); searchCriteria.RegionGuids.Add(Settings.Default.VastmanlandCountyGuid); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); Assert.IsTrue(information1.SpeciesObservations.IsNotEmpty()); // Test search criteria RegionLogicalOperator. // Test search criteria RegistrationDateTime. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.IncludePositiveObservations = true; searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.DrumGrasshopperId); searchCriteria.RegistrationDateTime = new WebDateTimeSearchCriteria(); searchCriteria.RegistrationDateTime.Begin = new DateTime(2009, 8, 1); searchCriteria.RegistrationDateTime.End = new DateTime(2009, 8, 31); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); searchCriteria.RegistrationDateTime.PartOfYear = new List <WebDateTimeInterval>(); searchCriteria.RegistrationDateTime.PartOfYear.Add(new WebDateTimeInterval()); searchCriteria.RegistrationDateTime.PartOfYear[0].Begin = new DateTime(2009, 8, 1); searchCriteria.RegistrationDateTime.PartOfYear[0].End = new DateTime(2009, 8, 31); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); // Test search criteria SpeciesActivityIds. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.IncludePositiveObservations = true; searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.TwiteId); searchCriteria.SpeciesActivityIds = new List <Int32>(); birdNestActivity = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetBirdNestActivities(GetClientInformation())[0]; searchCriteria.SpeciesActivityIds.Add(birdNestActivity.Id); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { if (darwinCore.DatasetName == "Fåglar") { Assert.AreEqual(birdNestActivity.Name, darwinCore.Occurrence.Behavior); } } // Test search criteria TaxonIds. searchCriteria = new WebSpeciesObservationSearchCriteria(); searchCriteria.IncludePositiveObservations = true; searchCriteria.TaxonIds = new List <Int32>(); searchCriteria.TaxonIds.Add(Settings.Default.DrumGrasshopperId); information1 = WebServiceProxy.SwedishSpeciesObservationSOAPService.GetDarwinCoreBySearchCriteria(GetClientInformation(), searchCriteria, coordinateSystem); CheckDarwinCoreInformation(information1); foreach (WebDarwinCore darwinCore in information1.SpeciesObservations) { Assert.AreEqual(Settings.Default.DrumGrasshopperId, Int32.Parse(darwinCore.Taxon.TaxonID)); } // Test search criteria TaxonValidationStatusIds. }