/// <summary> /// /// </summary> /// <param name="tokenizer"></param> /// <returns></returns> private static GeoAPI.CoordinateSystems.IProjectedCoordinateSystem ReadProjectedCoordinateSystem(GisSharpBlog.NetTopologySuite.IO.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"); GeoAPI.CoordinateSystems.IGeographicCoordinateSystem geographicCS = ReadGeographicCoordinateSystem(tokenizer); tokenizer.ReadToken(","); GeoAPI.CoordinateSystems.IProjection projection = ReadProjection(tokenizer); GeoAPI.CoordinateSystems.IUnit unit = ReadUnit(tokenizer); tokenizer.ReadToken(","); string authority = String.Empty; long authorityCode = -1; tokenizer.ReadAuthority(ref authority, ref authorityCode); tokenizer.ReadToken("]"); List <GeoAPI.CoordinateSystems.AxisInfo> axes = new List <GeoAPI.CoordinateSystems.AxisInfo>(); GeoAPI.CoordinateSystems.IProjectedCoordinateSystem projectedCS = new ProjectedCoordinateSystem(geographicCS.HorizontalDatum, geographicCS, unit as LinearUnit, projection, axes, name, authority, authorityCode, String.Empty, String.Empty, String.Empty); return(projectedCS); }
private void Initialize() { GisSharpBlog.NetTopologySuite.Geometries.PrecisionModel precisionModel = new GisSharpBlog.NetTopologySuite.Geometries.PrecisionModel(GeoAPI.Geometries.PrecisionModels.Floating); SharpMap.CoordinateSystems.CoordinateSystem wgs84 = SharpMap.CoordinateSystems.GeographicCoordinateSystem.WGS84; GeoAPI.CoordinateSystems.ICoordinateSystemFactory cFac = new SharpMap.CoordinateSystems.CoordinateSystemFactory(); //Create geographic coordinate system based on the WGS84 datum GeoAPI.CoordinateSystems.IEllipsoid ellipsoid = cFac.CreateFlattenedSphere("WGS 84", 6378137, 298.257223563, SharpMap.CoordinateSystems.LinearUnit.Metre); GeoAPI.CoordinateSystems.IHorizontalDatum datum = cFac.CreateHorizontalDatum("WGS_1984", GeoAPI.CoordinateSystems.DatumType.HD_Geocentric, ellipsoid, null); GeoAPI.CoordinateSystems.IGeographicCoordinateSystem gcsWGS84 = cFac.CreateGeographicCoordinateSystem("WGS 84", SharpMap.CoordinateSystems.AngularUnit.Degrees, datum, SharpMap.CoordinateSystems.PrimeMeridian.Greenwich, new GeoAPI.CoordinateSystems.AxisInfo("Lon", GeoAPI.CoordinateSystems.AxisOrientationEnum.East), new GeoAPI.CoordinateSystems.AxisInfo("Lat", GeoAPI.CoordinateSystems.AxisOrientationEnum.North)); List <GeoAPI.CoordinateSystems.ProjectionParameter> parameters = new List <GeoAPI.CoordinateSystems.ProjectionParameter>(); parameters.Add(new GeoAPI.CoordinateSystems.ProjectionParameter("latitude_of_origin", 0)); parameters.Add(new GeoAPI.CoordinateSystems.ProjectionParameter("central_meridian", 117)); parameters.Add(new GeoAPI.CoordinateSystems.ProjectionParameter("scale_factor", 0.9996)); parameters.Add(new GeoAPI.CoordinateSystems.ProjectionParameter("false_easting", 500000)); parameters.Add(new GeoAPI.CoordinateSystems.ProjectionParameter("false_northing", 10000000)); GeoAPI.CoordinateSystems.IProjection projection = cFac.CreateProjection("Transverse Mercator", "Transverse Mercator", parameters); GeoAPI.CoordinateSystems.IProjectedCoordinateSystem utmWGS84 = cFac.CreateProjectedCoordinateSystem("WGS84 UTM Zone 50S", gcsWGS84, projection, SharpMap.CoordinateSystems.LinearUnit.Metre, new GeoAPI.CoordinateSystems.AxisInfo("East", GeoAPI.CoordinateSystems.AxisOrientationEnum.East), new GeoAPI.CoordinateSystems.AxisInfo("North", GeoAPI.CoordinateSystems.AxisOrientationEnum.North)); int SRID_utm50 = Convert.ToInt32(utmWGS84.AuthorityCode); //UTM50 SRID SharpMap.CoordinateSystems.Transformations.CoordinateTransformationFactory ctFact = new SharpMap.CoordinateSystems.Transformations.CoordinateTransformationFactory(); _Transform = ctFact.CreateFromCoordinateSystems(utmWGS84, wgs84); _UTM50Factory = new GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory(precisionModel, SRID_utm50); }