/// <summary> /// 是否相等 /// </summary> /// <param name="obj"></param> /// <returns>True if equal</returns> public override bool Equals(object obj) { if (!(obj is ProjectedCs)) { return(false); } ProjectedCs pcs = obj as ProjectedCs; if (pcs.Dimension != this.Dimension) { return(false); } for (int i = 0; i < pcs.Dimension; i++) { if (pcs.Axes[i].Orientation.Direction != this.Axes[i].Orientation.Direction) { return(false); } if (!pcs.Axes[i].Unit.Equals(this.Axes[i].Unit)) { return(false); } } return(pcs.GeographicCs.Equals(this.GeographicCs) && pcs.HorizontalDatum.Equals(this.HorizontalDatum) && pcs.LinearUnit.Equals(this.LinearUnit) && pcs.Projection.Equals(this.Projection)); }
/// <summary> /// /// </summary> /// <param name="tokenizer"></param> /// <returns></returns> private static ProjectedCs ReadProjectedCoordinateSystem(WktStreamTokenizer tokenizer) { /*PROJCS[ * "OSGB 1936 / British National Grid", * GEOGCS[ * "OSGB 1936", * DATUM[...] * PRIMEM[...] * AXIS["Geodetic latitude","NORTH"] * AXIS["Geodetic longitude","EAST"] * AUTHORITY["EPSG","4277"] * ], * PROJECTION["Transverse Mercator"], * PARAMETER["latitude_of_natural_origin",49], * PARAMETER["longitude_of_natural_origin",-2], * PARAMETER["scale_factor_at_natural_origin",0.999601272], * PARAMETER["false_easting",400000], * PARAMETER["false_northing",-100000], * AXIS["Easting","EAST"], * AXIS["Northing","NORTH"], * AUTHORITY["EPSG","27700"] * ] */ tokenizer.ReadToken("["); string name = tokenizer.ReadDoubleQuotedWord(); tokenizer.ReadToken(","); tokenizer.ReadToken("GEOGCS"); GeographicCs geographicCS = ReadGeographicCoordinateSystem(tokenizer); tokenizer.ReadToken(","); Projection projection = ReadProjection(tokenizer); Unit unit = ReadLinearUnit(tokenizer); string authority = String.Empty; long authorityCode = -1; tokenizer.NextToken(); List <IAxis> axes = new List <IAxis>(2); if (tokenizer.GetStringValue() == ",") { tokenizer.NextToken(); while (tokenizer.GetStringValue() == "AXIS") { axes.Add(ReadAxis(tokenizer)); tokenizer.NextToken(); if (tokenizer.GetStringValue() == ",") { tokenizer.NextToken(); } } if (tokenizer.GetStringValue() == ",") { tokenizer.NextToken(); } if (tokenizer.GetStringValue() == "AUTHORITY") { tokenizer.ReadAuthority(ref authority, ref authorityCode); tokenizer.ReadToken("]"); } } //This is default axis values if not specified. if (axes.Count == 0) { axes.Add(new Axis("X", Direction.East)); axes.Add(new Axis("Y", Direction.North)); } ProjectedCs projectedCS = new ProjectedCs(geographicCS.HorizontalDatum, geographicCS, unit as LinearUnit, projection, axes, name, authorityCode + ""); return(projectedCS); }